亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

一文詳細(xì)了解類(lèi)型體操

我快閉嘴 ? 來(lái)源:OSC開(kāi)源社區(qū) ? 作者:OSC開(kāi)源社區(qū) ? 2022-09-27 10:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

今天給大家分享的主題是一起來(lái)做類(lèi)型體操。

主要分為 4 個(gè)部分進(jìn)行介紹:

  1. 類(lèi)型體操的背景,通過(guò)背景了解為什么要在項(xiàng)目中加入類(lèi)型體操;
  2. 了解類(lèi)型體操的主要類(lèi)型、運(yùn)算邏輯、和類(lèi)型套路;
  3. 類(lèi)型體操實(shí)踐,解析 TypeScript 內(nèi)置高級(jí)類(lèi)型,手寫(xiě) ParseQueryString 復(fù)雜類(lèi)型;
  4. 小結(jié),綜上分享,沉淀結(jié)論。

一、背景

在背景章節(jié)介紹的是什么是類(lèi)型,什么是類(lèi)型安全,怎么實(shí)現(xiàn)類(lèi)型安全,什么是類(lèi)型體操?

以了解類(lèi)型體操的意義。

1. 什么是類(lèi)型?

了解什么是類(lèi)型之前,先來(lái)介紹兩個(gè)概念:

  • 不同類(lèi)型變量占據(jù)的內(nèi)存大小不同

boolean 類(lèi)型的變量會(huì)分配 4 個(gè)字節(jié)的內(nèi)存,而 number 類(lèi)型的變量則會(huì)分配 8 個(gè)字節(jié)的內(nèi)存,給變量聲明了不同的類(lèi)型就代表了會(huì)占據(jù)不同的內(nèi)存空間。

  • 不同類(lèi)型變量可做的操作不同

number 類(lèi)型可以做加減乘除等運(yùn)算,boolean 就不可以,復(fù)合類(lèi)型中不同類(lèi)型的對(duì)象可用的方法不同,比如 Date 和 RegExp,變量的類(lèi)型不同代表可以對(duì)該變量做的操作就不同。

綜上,可以得到一個(gè)簡(jiǎn)單的結(jié)論就是,類(lèi)型就是編程語(yǔ)言提供對(duì)不同內(nèi)容的抽象定義。

2. 什么是類(lèi)型安全?

了解了類(lèi)型的概念后,那么,什么是類(lèi)型安全呢?

一個(gè)簡(jiǎn)單的定義就是,類(lèi)型安全就是只做該類(lèi)型允許的操作。比如對(duì)于 boolean 類(lèi)型,不允許加減乘除運(yùn)算,只允許賦值 true、false。

當(dāng)我們能做到類(lèi)型安全時(shí),可以大量的減少代碼中潛在的問(wèn)題,大量提高代碼質(zhì)量。

3. 怎么實(shí)現(xiàn)類(lèi)型安全?

那么,怎么做到類(lèi)型安全?

這里介紹兩種類(lèi)型檢查機(jī)制,分別是動(dòng)態(tài)類(lèi)型檢查和靜態(tài)類(lèi)型檢查。

3.1 動(dòng)態(tài)類(lèi)型檢查

Javascript 就是典型的動(dòng)態(tài)類(lèi)型檢查,它在編譯時(shí),沒(méi)有類(lèi)型信息,到運(yùn)行時(shí)才檢查,導(dǎo)致很多隱藏 bug。

6e1169d8-3d9e-11ed-9e49-dac502259ad0.jpg

3.2 靜態(tài)類(lèi)型檢查

TypeScript 作為 Javascript 的超集,采用的是靜態(tài)類(lèi)型檢查,在編譯時(shí)就有類(lèi)型信息,檢查類(lèi)型問(wèn)題,減少運(yùn)行時(shí)的潛在問(wèn)題。

6e1fce4c-3d9e-11ed-9e49-dac502259ad0.jpg

4. 什么是類(lèi)型體操

上面介紹了類(lèi)型的一些定義,都是大家熟悉的一些關(guān)于類(lèi)型的背景介紹,這一章節(jié)回歸到本次分享的主題概念,類(lèi)型體操。

了解類(lèi)型體操前,先介紹 3 種類(lèi)型系統(tǒng)。

4.1 簡(jiǎn)單類(lèi)型系統(tǒng)

簡(jiǎn)單類(lèi)型系統(tǒng),它只基于聲明的類(lèi)型做檢查,比如一個(gè)加法函數(shù),可以加整數(shù)也可以加小數(shù),但在簡(jiǎn)單類(lèi)型系統(tǒng)中,需要聲明 2 個(gè)函數(shù)來(lái)做這件事情。

intadd(inta,intb){
returna+b
}

doubleadd(doublea,doubleb){
returna+b
}

4.2 泛型類(lèi)型系統(tǒng)

泛型類(lèi)型系統(tǒng),它支持類(lèi)型參數(shù),通過(guò)給參數(shù)傳參,可以動(dòng)態(tài)定義類(lèi)型,讓類(lèi)型更加靈活。

Tadd(Ta,Tb){
returna+b
}

add(1,2)
add(1.1,2.2)

但是在一些需要類(lèi)型參數(shù)邏輯運(yùn)算的場(chǎng)景就不適用了,比如一個(gè)返回對(duì)象某個(gè)屬性值的函數(shù)類(lèi)型。

functiongetPropValue<T>(obj:T,key){
returnobj[key]
}

4.3 類(lèi)型編程系統(tǒng)

類(lèi)型編程系統(tǒng),它不僅支持類(lèi)型參數(shù),還能給類(lèi)型參數(shù)做各種邏輯運(yùn)算,比如上面提到的返回對(duì)象某個(gè)屬性值的函數(shù)類(lèi)型,可以通過(guò) keyof、T[K] 來(lái)邏輯運(yùn)算得到函數(shù)類(lèi)型。

functiongetPropValue<
??Textendsobject,
KeyextendskeyofT
>(obj:T,key:Key):T[Key]{
returnobj[key]
}

總結(jié)上述,類(lèi)型體操就是類(lèi)型編程,對(duì)類(lèi)型參數(shù)做各種邏輯運(yùn)算,以產(chǎn)生新的類(lèi)型。

之所以稱(chēng)之為體操,是因?yàn)樗膹?fù)雜度,右側(cè)是一個(gè)解析參數(shù)的函數(shù)類(lèi)型,里面用到了很多復(fù)雜的邏輯運(yùn)算,等先介紹了類(lèi)型編程的運(yùn)算方法后,再來(lái)解析這個(gè)類(lèi)型的實(shí)現(xiàn)。

二、了解類(lèi)型體操

熟悉完類(lèi)型體操的概念后,再來(lái)繼續(xù)了解類(lèi)型體操有哪些類(lèi)型,支持哪些運(yùn)算邏輯,有哪些運(yùn)算套路。

1. 有哪些類(lèi)型

類(lèi)型體操的主要類(lèi)型列舉在圖中。TypeScript 復(fù)用了 JS 的基礎(chǔ)類(lèi)型和復(fù)合類(lèi)型,并新增元組(Tuple)、接口(Interface)、枚舉(Enum)等類(lèi)型,這些類(lèi)型在日常開(kāi)發(fā)過(guò)程中類(lèi)型聲明應(yīng)該都很常用,不做贅述。

6e374388-3d9e-11ed-9e49-dac502259ad0.jpg
//元組(Tuple)就是元素個(gè)數(shù)和類(lèi)型固定的數(shù)組類(lèi)型
typeTuple=[number,string];

//接口(Interface)可以描述函數(shù)、對(duì)象、構(gòu)造器的結(jié)構(gòu):
interfaceIPerson{
name:string;
age:number;
}

classPersonimplementsIPerson{
name:string;
age:number;
}

constobj:IPerson={
name:'aa',
age:18
}

//枚舉(Enum)是一系列值的復(fù)合:
enumTranspiler{
Babel='babel',
Postcss='postcss',
Terser='terser',
Prettier='prettier',
TypeScriptCompiler='tsc'
}

consttranspiler=Transpiler.TypeScriptCompiler;

2. 運(yùn)算邏輯

重點(diǎn)介紹的是類(lèi)型編程支持的運(yùn)算邏輯。

TypeScript 支持條件、推導(dǎo)、聯(lián)合、交叉、對(duì)聯(lián)合類(lèi)型做映射等 9 種運(yùn)算邏輯。

  • 條件:T extends U ? X : Y

條件判斷和 js 邏輯相同,都是如果滿(mǎn)足條件就返回 a 否則返回 b。

//條件:extends?:
//如果T是2的子類(lèi)型,那么類(lèi)型是true,否則類(lèi)型是false。
typeisTwo=Textends2?true:false;
//false
typeres=isTwo<1>;
  • 約束:extends

通過(guò)約束語(yǔ)法 extends 限制類(lèi)型。

//通過(guò)TextendsLength約束了T的類(lèi)型,必須是包含length屬性,且length的類(lèi)型必須是number。
interfaceLength{
length:number
}

functionfn1<TextendsLength>(arg:T):number{
returnarg.length
}
  • 推導(dǎo):infer

推導(dǎo)則是類(lèi)似 js 的正則匹配,都滿(mǎn)足公式條件時(shí),可以提取公式中的變量,直接返回或者再次加工都可以。

//推導(dǎo):infer
//提取元組類(lèi)型的第一個(gè)元素:
//extends約束類(lèi)型參數(shù)只能是數(shù)組類(lèi)型,因?yàn)椴恢罃?shù)組元素的具體類(lèi)型,所以用unknown。
//extends判斷類(lèi)型參數(shù)T是不是[inferF,...inferR]的子類(lèi)型,如果是就返回F變量,如果不是就不返回
typeFirst=Textends[inferF,...inferR]?F:never;
//1
typeres2=First<[1,2,3]>;
  • 聯(lián)合:|

聯(lián)合代表可以是幾個(gè)類(lèi)型之一。

typeUnion=1|2|3
  • 交叉:&

交叉代表對(duì)類(lèi)型做合并。

typeObjType={a:number}&{c:boolean}
  • 索引查詢(xún):keyof T

keyof 用于獲取某種類(lèi)型的所有鍵,其返回值是聯(lián)合類(lèi)型。

//consta:'name'|'age'='name'
consta:keyof{
name:string,
age:number
}='name'
  • 索引訪問(wèn):T[K]

T[K] 用于訪問(wèn)索引,得到索引對(duì)應(yīng)的值的聯(lián)合類(lèi)型。

interfaceI3{
name:string,
age:number
}

typeT6=I3[keyofI3]//string|number

  • 索引遍歷: in

in 用于遍歷聯(lián)合類(lèi)型。

constobj={
name:'tj',
age:11
}

typeT5={
[Pinkeyoftypeofobj]:any
}

/*
{
name:any,
age:any
}
*/
  • 索引重映射: as

as 用于修改映射類(lèi)型的 key。

//通過(guò)索引查詢(xún)keyof,索引訪問(wèn)t[k],索引遍歷in,索引重映射as,返回全新的key、value構(gòu)成的新的映射類(lèi)型
typeMapType={
[
KeyinkeyofT
as`${Key&string}${Key&string}${Key&string}`
]:[T[Key],T[Key],T[Key]]
}
//{
//aaa:[1,1,1];
//bbb:[2,2,2];
//}
typeres3=MapType<{?a:1,b:2}>

3. 運(yùn)算套路

根據(jù)上面介紹的 9 種運(yùn)算邏輯,我總結(jié)了 4 個(gè)類(lèi)型套路。

  • 模式匹配做提??;
  • 重新構(gòu)造做變換;
  • 遞歸復(fù)用做循環(huán);
  • 數(shù)組長(zhǎng)度做計(jì)數(shù)。

3.1 模式匹配做提取

第一個(gè)類(lèi)型套路是模式匹配做提取。

模式匹配做提取的意思是通過(guò)類(lèi)型 extends 一個(gè)模式類(lèi)型,把需要提取的部分放到通過(guò) infer 聲明的局部變量里。

舉個(gè)例子,用模式匹配提取函數(shù)參數(shù)類(lèi)型。

typeGetParametersFunction>=
Funcextends(...args:inferArgs)=>unknown?Args:never;

typeParametersResult=GetParameters<(name:string,age:number)=>string>

首先用 extends 限制類(lèi)型參數(shù)必須是 Function 類(lèi)型。

然后用 extends 為 參數(shù)類(lèi)型匹配公式,當(dāng)滿(mǎn)足公式時(shí),提取公式中的變量 Args。

實(shí)現(xiàn)函數(shù)參數(shù)類(lèi)型的提取。

3.2 重新構(gòu)造做變換

第二個(gè)類(lèi)型套路是重新構(gòu)造做變換。

重新構(gòu)造做變換的意思是想要變化就需要重新構(gòu)造新的類(lèi)型,并且可以在構(gòu)造新類(lèi)型的過(guò)程中對(duì)原類(lèi)型做一些過(guò)濾和變換。

比如實(shí)現(xiàn)一個(gè)字符串類(lèi)型的重新構(gòu)造。

typeCapitalizeStr=
Strextends`${inferFirst}${inferRest}`
?`${Uppercase}${Rest}`:Str;

typeCapitalizeResult=CapitalizeStr<'tang'>

首先限制參數(shù)類(lèi)型必須是字符串類(lèi)型。

然后用 extends 為參數(shù)類(lèi)型匹配公式,提取公式中的變量 First Rest,并通過(guò) Uppercase 封裝。

實(shí)現(xiàn)了首字母大寫(xiě)的字符串字面量類(lèi)型。

3.3 遞歸復(fù)用做循環(huán)

第三個(gè)類(lèi)型套路是遞歸復(fù)用做循環(huán)。

TypeScript 本身不支持循環(huán),但是可以通過(guò)遞歸完成不確定數(shù)量的類(lèi)型編程,達(dá)到循環(huán)的效果。

比如通過(guò)遞歸實(shí)現(xiàn)數(shù)組類(lèi)型反轉(zhuǎn)。

typeReverseArr=
Arrextends[inferFirst,...inferRest]
?[...ReverseArr,First]
:Arr;


typeReverseArrResult=ReverseArr<[1,2,3,4,5]>

首先限制參數(shù)必須是數(shù)組類(lèi)型。

然后用 extends 匹配公式,如果滿(mǎn)足條件,則調(diào)用自身,否則直接返回。

實(shí)現(xiàn)了一個(gè)數(shù)組反轉(zhuǎn)類(lèi)型。

3.4 數(shù)組長(zhǎng)度做計(jì)數(shù)

第四個(gè)類(lèi)型套路是數(shù)組長(zhǎng)度做計(jì)數(shù)。

類(lèi)型編程本身是不支持做加減乘除運(yùn)算的,但是可以通過(guò)遞歸構(gòu)造指定長(zhǎng)度的數(shù)組,然后取數(shù)組長(zhǎng)度的方式來(lái)完成數(shù)值的加減乘除。

比如通過(guò)數(shù)組長(zhǎng)度實(shí)現(xiàn)類(lèi)型編程的加法運(yùn)算。

typeBuildArray<
????Length?extends?number,
????Ele?=?unknown,
????Arr?extends?unknown[]?=?[]
????>=Arr['length']extendsLength
?Arr
:BuildArray;

typeAdd=
[...BuildArray,...BuildArray]['length'];


typeAddResult=Add<32,25>

首先通過(guò)遞歸創(chuàng)建一個(gè)可以生成任意長(zhǎng)度的數(shù)組類(lèi)型

然后創(chuàng)建一個(gè)加法類(lèi)型,通過(guò)數(shù)組的長(zhǎng)度來(lái)實(shí)現(xiàn)加法運(yùn)算。

三、類(lèi)型體操實(shí)踐

分享的第三部分是類(lèi)型體操實(shí)踐。

前面分享了類(lèi)型體操的概念及常用的運(yùn)算邏輯。

下面我們就用這些運(yùn)算邏輯來(lái)解析 TypeScript 內(nèi)置的高級(jí)類(lèi)型。

1. 解析 TypeScript 內(nèi)置高級(jí)類(lèi)型

  • partial 把索引變?yōu)榭蛇x

通過(guò) in 操作符遍歷索引,為所有索引添加 ?前綴實(shí)現(xiàn)把索引變?yōu)榭蛇x的新的映射類(lèi)型。

typeTPartial={
[PinkeyofT]?:T[P];
};

typePartialRes=TPartial<{?name:'aa',age:18}>
  • Required 把索引變?yōu)楸剡x

通過(guò) in 操作符遍歷索引,為所有索引刪除 ?前綴實(shí)現(xiàn)把索引變?yōu)楸剡x的新的映射類(lèi)型。

typeTRequired={
[PinkeyofT]-?:T[P]
}

typeRequiredRes=TRequired<{?name?:?'aa',age?:18}>
  • Readonly 把索引變?yōu)橹蛔x

通過(guò) in 操作符遍歷索引,為所有索引添加 readonly 前綴實(shí)現(xiàn)把索引變?yōu)橹蛔x的新的映射類(lèi)型。

typeTReadonly={
readonly[PinkeyofT]:T[P]
}

typeReadonlyRes=TReadonly<{?name?:?'aa',age?:18}>
  • Pick 保留過(guò)濾索引

首先限制第二個(gè)參數(shù)必須是對(duì)象的 key 值,然后通過(guò) in 操作符遍歷第二個(gè)參數(shù),生成新的映射類(lèi)型實(shí)現(xiàn)。

typeTPick={
[PinK]:T[P]
}

typePickRes=TPick<{?name?:?'aa',age?:18},'name'>
  • Record 創(chuàng)建映射類(lèi)型

通過(guò) in 操作符遍歷聯(lián)合類(lèi)型 K,創(chuàng)建新的映射類(lèi)型。

typeTRecord={
[PinK]:T
}

typeRecordRes=TRecord<'aa'|'bb',string>
  • Exclude 刪除聯(lián)合類(lèi)型的一部分

通過(guò) extends 操作符,判斷參數(shù) 1 能否賦值給參數(shù) 2,如果可以則返回 never,以此刪除聯(lián)合類(lèi)型的一部分。

typeTExclude=TextendsU?never:T

typeExcludeRes=TExclude<'aa'|'bb','aa'>
  • Extract 保留聯(lián)合類(lèi)型的一部分

和 Exclude 邏輯相反,判斷參數(shù) 1 能否賦值給參數(shù) 2,如果不可以則返回 never,以此保留聯(lián)合類(lèi)型的一部分。

typeTExtract=TextendsU?T:never

typeExtractRes=TExtract<'aa'|'bb','aa'>
  • Omit 刪除過(guò)濾索引

通過(guò)高級(jí)類(lèi)型 Pick、Exclude 組合,刪除過(guò)濾索引。

typeTOmit=Pick>

typeOmitRes=TOmit<{?name:'aa',age:18},'name'>
  • Awaited 用于獲取 Promise 的 valueType

通過(guò)遞歸來(lái)獲取未知層級(jí)的 Promise 的 value 類(lèi)型。

typeTAwaited=
Textendsnull|undefined
?T
:Textendsobject&{then(onfulfilled:inferF):any}
?Fextends((value:inferV,...args:any)=>any)
?Awaited
:never
:T;


typeAwaitedRes=TAwaited<Promise<Promise<Promise>>>

還有非常多高級(jí)類(lèi)型,實(shí)現(xiàn)思路和上面介紹的類(lèi)型套路大多一致,這里不一一贅述。

2. 解析 ParseQueryString 復(fù)雜類(lèi)型

重點(diǎn)解析的是在背景章節(jié)介紹類(lèi)型體操?gòu)?fù)雜度,舉例說(shuō)明的解析字符串參數(shù)的函數(shù)類(lèi)型。

如圖示 demo 所示,這個(gè)函數(shù)是用于將指定字符串格式解析為對(duì)象格式。

functionparseQueryString1(queryStr){
if(!queryStr||!queryStr.length){
return{}
}
constqueryObj={}
constitems=queryStr.split('&')
items.forEach((item)=>{
const[key,value]=item.split('=')
if(queryObj[key]){
if(Array.isArray(queryObj[key])){
queryObj[key].push(value)
}else{
queryObj[key]=[queryObj[key],value]
}
}else{
queryObj[key]=value
}
})
returnqueryObj
}

比如獲取字符串 a=1&b=2 中 a 的值。

常用的類(lèi)型聲明方式如下圖所示:

functionparseQueryString1(queryStr:string):Record<string,any>{
if(!queryStr||!queryStr.length){
return{}
}
constqueryObj={}
constitems=queryStr.split('&')
items.forEach((item)=>{
const[key,value]=item.split('=')
if(queryObj[key]){
if(Array.isArray(queryObj[key])){
queryObj[key].push(value)
}else{
queryObj[key]=[queryObj[key],value]
}
}else{
queryObj[key]=value
}
})
returnqueryObj
}

參數(shù)類(lèi)型為 string,返回類(lèi)型為 Record,這時(shí)看到,res1.a 類(lèi)型為 any,那么有沒(méi)有辦法,準(zhǔn)確的知道 a 的類(lèi)型是字面量類(lèi)型 1 呢?

下面就通過(guò)類(lèi)型體操的方式,來(lái)重寫(xiě)解析字符串參數(shù)的函數(shù)類(lèi)型。

首先限制參數(shù)類(lèi)型是 string 類(lèi)型,然后為參數(shù)匹配公式 a&b,如果滿(mǎn)足公式,將 a 解析為 key value 的映射類(lèi)型,將 b 遞歸 ParseQueryString 類(lèi)型,繼續(xù)解析,直到不再滿(mǎn)足 a&b 公式。

最后,就可以得到一個(gè)精準(zhǔn)的函數(shù)返回類(lèi)型,res.a = 1。

typeParseParam=
Paramextends`${inferKey}=${inferValue}`
?{
[KinKey]:Value
}:Record;

typeMergeParams<
????OneParam?extends?Record,
OtherParamextendsRecord
>={
readonly[KeyinkeyofOneParam|keyofOtherParam]:
KeyextendskeyofOneParam
?OneParam[Key]
:KeyextendskeyofOtherParam
?OtherParam[Key]
:never
}

typeParseQueryString=
Strextends`${inferParam}&${inferRest}`
?MergeParams,ParseQueryString>
:ParseParam;
functionparseQueryString<Strextendsstring>(queryStr:Str):ParseQueryString<Str>{
if(!queryStr||!queryStr.length){
return{}asany;
}
constqueryObj={}asany;
constitems=queryStr.split('&');
items.forEach(item=>{
const[key,value]=item.split('=');
if(queryObj[key]){
if(Array.isArray(queryObj[key])){
queryObj[key].push(value);
}else{
queryObj[key]=[queryObj[key],value]
}
}else{
queryObj[key]=value;
}
});
returnqueryObjasany;
}


constres=parseQueryString('a=1&b=2&c=3');

console.log(res.a)//type1

四、小結(jié)

綜上分享,從 3 個(gè)方面介紹了類(lèi)型體操。

  • 第一點(diǎn)是類(lèi)型體操背景,了解了什么是類(lèi)型,什么是類(lèi)型安全,怎么實(shí)現(xiàn)類(lèi)型安全;

  • 第二點(diǎn)是熟悉類(lèi)型體操的主要類(lèi)型、支持的邏輯運(yùn)算,并總結(jié)了 4 個(gè)類(lèi)型套路;

  • 第三點(diǎn)是類(lèi)型體操實(shí)踐,解析了 TypeScript 內(nèi)置高級(jí)類(lèi)型的實(shí)現(xiàn),并手寫(xiě)了一些復(fù)雜函數(shù)類(lèi)型。

從中我們了解到需要?jiǎng)討B(tài)生成類(lèi)型的場(chǎng)景,必然是要用類(lèi)型編程做一些運(yùn)算,即使有的場(chǎng)景下可以不用類(lèi)型編程,但是使用類(lèi)型編程能夠有更精準(zhǔn)的類(lèi)型提示和檢查,減少代碼中潛在的問(wèn)題。

審核編輯:湯梓紅


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3161

    瀏覽量

    76012
  • 編程
    +關(guān)注

    關(guān)注

    89

    文章

    3705

    瀏覽量

    96515

原文標(biāo)題:類(lèi)型體操的9種類(lèi)型運(yùn)算、4種類(lèi)型套路總結(jié)

文章出處:【微信號(hào):OSC開(kāi)源社區(qū),微信公眾號(hào):OSC開(kāi)源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    詳細(xì)了解JTAG接口

    在FPGA研發(fā)及學(xué)習(xí)過(guò)程中,有個(gè)關(guān)鍵步驟就是下板實(shí)現(xiàn),做硬件“硬現(xiàn)”很重要,般來(lái)說(shuō)用JTAG口比較常見(jiàn)些,因此相信肯定有些大俠遇到過(guò)JTAG口失靈或者損壞無(wú)法使用的事情。最近我就遇到了這類(lèi)事情
    發(fā)表于 07-20 09:15 ?1.4w次閱讀

    了解MyBatis的查詢(xún)?cè)?/a>

    可以詳細(xì)了解MyBatis的次查詢(xún)過(guò)程。在平時(shí)的代碼編寫(xiě)中,發(fā)現(xiàn)了MyBatis個(gè)低版本的bug(3.4.5之前的版本),由于現(xiàn)在很多工程中的版本都是低于3.4.5的,因此在這里用
    的頭像 發(fā)表于 10-10 11:42 ?1905次閱讀

    用VDK+BF537開(kāi)發(fā)產(chǎn)品中,想詳細(xì)了解下VDK中事件、事件bit、信號(hào)量的使用方法,以及如何寫(xiě)自己的device drivers

    用VDK+BF537開(kāi)發(fā)產(chǎn)品中,想詳細(xì)了解下VDK中事件、事件bit、信號(hào)量的使用方法,以及如何寫(xiě)自己的device drivers。請(qǐng)問(wèn)哪有針對(duì)上述問(wèn)題的資料下載?
    發(fā)表于 12-06 09:19

    詳細(xì)了解下ups的相關(guān)計(jì)算

    關(guān)于ups方面的計(jì)算有很多,ups無(wú)論是接空開(kāi),還是連接電纜,以及選擇電池,都可能需要計(jì)算它的電流或功率等,那么今天我們來(lái)詳細(xì)了解下ups的相關(guān)計(jì)算。、UPS電源及電流、高頻ups與工頻ups
    發(fā)表于 11-16 09:08

    詳細(xì)了解下STM32F1的具體電路參數(shù)

    最近筆者在使用STM32時(shí),需要詳細(xì)了解下F1的具體電路參數(shù)。于是查看其官方數(shù)據(jù)手冊(cè),結(jié)果記錄如下。絕對(duì)最大額度值般工作條件表中的FT指5V 耐壓??梢栽谝_定義表格中看到。I/O端口特性(邏輯電平)在最后
    發(fā)表于 01-18 07:07

    帶你詳細(xì)了解HarmonyOS折疊屏設(shè)計(jì)規(guī)范!

    /docs/design/des-guides/basic-requirements-0000001193421226),了解更多HarmonyOS折疊屏設(shè)計(jì)規(guī)范的詳細(xì)內(nèi)容。
    發(fā)表于 05-20 10:22

    通過(guò) iftop、 nethogs 和 vnstat 詳細(xì)了解你的網(wǎng)絡(luò)連接狀態(tài)

    通過(guò) iftop、 nethogs 和 vnstat 詳細(xì)了解你的網(wǎng)絡(luò)連接狀態(tài)。
    的頭像 發(fā)表于 01-27 21:10 ?2.2w次閱讀
    通過(guò) iftop、 nethogs 和 vnstat <b class='flag-5'>詳細(xì)了解</b>你的網(wǎng)絡(luò)連接狀態(tài)

    詳細(xì)了解HarmonyOS工程

    華為云享專(zhuān)家,InfoQ簽約作者,阿里云專(zhuān)家博主,51CTO博客首席體驗(yàn)官,開(kāi)源項(xiàng)目GVA成員之,專(zhuān)注于大前端技術(shù)的分享,包括Flutter,小程序,安卓,VUE,JavaScript。
    的頭像 發(fā)表于 02-28 10:53 ?1990次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>詳細(xì)了解</b>HarmonyOS工程

    詳細(xì)了解Cgroup

    cgroup最基本的操作時(shí)我們可以使用以下命令創(chuàng)建個(gè)cgroup文件夾
    的頭像 發(fā)表于 04-20 11:10 ?7281次閱讀

    詳細(xì)了解OpenHarmony新圖形框架

    3月30日,OpenHarmony v3.1 Release版本正式發(fā)布了。此版本為大家?guī)?lái)了全新的圖形框架,實(shí)現(xiàn)了UI框架顯示、多窗口、流暢動(dòng)畫(huà)等基礎(chǔ)能力,夯實(shí)了OpenHarmony系統(tǒng)能力基座。下面就帶大家詳細(xì)了解新圖形框架。
    的頭像 發(fā)表于 04-27 13:21 ?2998次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b><b class='flag-5'>詳細(xì)了解</b>OpenHarmony新圖形框架

    詳細(xì)了解HTTP協(xié)議

    Http協(xié)議即超文本傳送協(xié)議 (HTTP-Hypertext transfer protocol) 。
    的頭像 發(fā)表于 05-11 12:04 ?2136次閱讀

    詳細(xì)了解交換機(jī)數(shù)據(jù)接口類(lèi)型

    交換機(jī)的接口類(lèi)型變得非常豐富,為了讓大家對(duì)這些接口有個(gè)比較清晰的認(rèn)識(shí)今天我們就聊下交換機(jī)數(shù)據(jù)接口類(lèi)型,方便大家選擇。
    發(fā)表于 06-21 14:51 ?3247次閱讀

    詳細(xì)了解CCIX規(guī)范

    正文開(kāi)始前,閑扯幾句。在接下來(lái)分析CCIX規(guī)范的過(guò)程中,大家會(huì)發(fā)現(xiàn)CCIX里面有太多ARM的影子,尤其是協(xié)議層的致性協(xié)議部分,你會(huì)看到有很多跟CHI相似的東西。另外,在CCIX規(guī)范的底層,基本全是復(fù)用和遵循PCIe規(guī)范。
    的頭像 發(fā)表于 06-23 09:20 ?2758次閱讀

    帶您詳細(xì)了解IEEE802.3bt(PoE++)的有關(guān)特點(diǎn)

    Hqst華強(qiáng)盛(盈盛電子)導(dǎo)讀:帶您詳細(xì)了解IEEE802.3bt(PoE++)的有關(guān)特點(diǎn),讓我們對(duì)IEEE802.3bt(PoE++)協(xié)議有更具體的了解
    的頭像 發(fā)表于 01-04 11:26 ?3889次閱讀
    帶您<b class='flag-5'>一</b>起<b class='flag-5'>詳細(xì)了解</b>IEEE802.3bt(PoE++)的有關(guān)特點(diǎn)

    帶你詳細(xì)了解工業(yè)電腦

    扇設(shè)計(jì)、承受振動(dòng)和惡劣環(huán)境的能力、輕松配置、全面的I/O選項(xiàng)、延長(zhǎng)生命周期、耐用的組件。了解如何為您的應(yīng)用選擇工業(yè)電腦對(duì)提高設(shè)施的生產(chǎn)力和效率至關(guān)重要。詳細(xì)了解
    的頭像 發(fā)表于 06-12 14:24 ?1138次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>文</b>帶你<b class='flag-5'>詳細(xì)了解</b>工業(yè)電腦