日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

TypeScript條件類型示例全面講解

瀏覽:99日期:2022-06-12 17:07:49
目錄Typescript 高階類型索引類型extendsReadonly 只讀Omit 排除某些字段Typescript 高階類型索引類型

keyof 會提取interface中的key

class KeyCls {name: stringage: number}type KeyClsExample1 = keyof KeyCls // name | agefunction getParams(params: keyof KeyCls) {}getParams('name') // 正常getParams('age') // 正常getParams('sex') // 報錯

in 可以遍歷枚舉類型

type Keys = 'a' | 'b'type Obj = {[p in Keys]: any;}// type Obj = {// a: any;// b: any;// }extendstype TExtends<T, U> = T extends U ? number : never;type TExtendExample = TExtends<number, number | string> // number// 聯合類型, 表示如果T中的類型是U的子集, 那么返回never, 否則返回T, 這個過程可以理解為對T中的類型進行一次遍歷, 每個類型都執行一次extendstype NonNullable1<T, U> = T extends U ? never : Ttype NonExample = NonNullable1<null | string, null | undefined> // string

Pick 英文意思挑選, 也就是從某種類型中挑選出一個或多個屬性

interface Todo {title: stringdesc: stringDone: boolean}type TodoPreview = Pick<Todo, 'Done'>// type TodoPreview = {// Done: boolean;// }// 實現type MyPick<T, K extends keyof T = keyof T> = {[P in K]: T[P]}// K in extends keyof T = keyof T, 意思是取值必須是在T的key上面取, 如果不傳遞取值默認為keyof T,所有的key, 內部取值是如果傳遞了K, 則屬性就在K中任意一個Readonly 只讀interface Todo {title: stringdesc: stringDone: boolean}const todo: Pick<Readonly<Todo>, 'title'> = {title: '你好'}todo.title = '啊啊啊'; // 無法為“title”賦值,因為它是只讀屬性// 實現type myReadonly<T> = {readonly [K in keyof T]: T[K]}// 分析: 通過keyof拿到所有的key屬性值組成聯合類型, 然后通過in遍歷類型,在屬性值前面加上readonly, 值value則是 T[K]// 通過上面案例還可以實現可選類型type myOptional<T> = {[K in keyof T]?: T[K]}

Exclude 語法: Exclude<T, U>, 返回 T 中不存在于 U 的部分

// 回顧extends// // 聯合類型, 表示如果T中的類型是U的子集, 那么返回never, 否則返回T, 這個過程可以理解為對T中的類型進行一次遍歷, 每個類型都執行一次extends// type NonNullable1<T, U> = T extends U ? never : T// type NonExample = NonNullable1<null | string, null | undefined> // string// 自己實現Excludetype myExclude<T, U> = T extends U ? never : T// 測試// 分析: 對T也就是'a'|'b'遍歷, a extends 'a'|'b', 返回never, 'b', 'a'|'c',返回'b', 所以上面的返回'b'type excludeExample = myExclude<'a' | 'b', 'a' | 'c'> // 'b'

Partial 將傳入的屬性變為可選項

interface Todo {title: stringdesc: stringDone: boolean}type Partial<T> = {[P in keyof T]?: T[P]}type KeyOfExample1 = Partial<Todo>let keyofEx1: KeyOfExample1 = {title: '1'}

-? 將可選項代表的 ?去掉, 將該類型變成必選項, 與之對應的還有一個+?,是將可選項變成必選項

interface Todo {title: stringdesc: stringDone: boolean}type Mutable<T> = {-readonly [P in keyof T]: T[P]}type mutableExample = Mutable<Readonly<Todo>>// 將Todo變成可讀之后再變成可寫

Required 將傳入的屬性變成必選項

type Required<T> = {[P in keyof T]-?: T[P]}class KeyCls {name?: string;age?: number;}const requiredExample: Required<KeyCls> = {name: 'John',} // 報錯const requiredExample2: Required<KeyCls> = {name: 'John',age: 20,} // 正常

Record<K, T> 將K中所有的屬性轉化為T類型

type myRecord<K extends keyof any, T> = {[P in K]: T}enum Methods {GET = 'get',POST = 'post',DELETE = 'delete',PUT = 'put',}type IRouter = myRecord<Methods, (req: any, res: any) => void>// type IRouter = {// get: (req: any, res: any) => void;// post: (req: any, res: any) => void;// delete: (req: any, res: any) => void;// put: (req: any, res: any) => void;// }Omit 排除某些字段// 已經學習了Pick和Exclude, 則可以利用這兩個實現Omitclass KeyCls {name: string;age: number;}// 假設 T 為 KeyCls, K為name, 結果是 // type myOmit<KeyCls, 'name'>// { // age: number; // }// 只需要實現成這樣就行了, 也就是獲取到agetype myOmit<T, K extends keyof T> = Pick<T, 'age'>// 排除name, 按照上面的 Exclude<'name' | 'age', 'name'> // 'age'type myOmit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>// 測試type myOmitExample = myOmit<KeyCls, 'name'>;// type myOmitExample = { // age: number; // }

NonNullable<T>:作用是去掉 T 中的 null 和 undefined。T 為字面量/具體類型的聯合類型

// 4.8版本之前type NonNullable<T> = T extends null | undefined ? never : T;// 4.8版本之后type NonNullable<T> = T & {}

infer 可以推薦一個類型變量, 相當于生命一個類型變量, 這個變量的類型取決于傳入的泛型T

type F<T> = T extends () => infer R ? R : T;type F1 = F<string> // stringtype TObj<T> = T extends { name: infer V, age: infer U } ? V : Ttype TObjExample2 = TObj<{name: number;age: string;}>; // number;

ReturnType<T> 獲取函數返回值的類型

type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;functin getUser() { return {name: 'xxx',age: 20 }}type GetUserType = typeof getUser;// type GetUserType = () => {// name: string;// age: number;// }type ReturnUser = ReturnType<GetUserType>type ReturnUser = {// name: string;// age: number;// }

以上就是TypeScript條件類型的詳細內容,更多關于TypeScript條件類型的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日韩视频| 爽好久久久欧美精品| 日韩中文字幕无砖| 国产农村妇女精品一区二区| av一区二区高清| 欧美日韩水蜜桃| 欧美综合另类| 日韩啪啪电影网| 日韩精品免费一区二区三区| 日韩不卡免费高清视频| 欧美xxxx中国| 久久国产直播| 精品一区免费| 亚洲区第一页| 国产亚洲一区| 国产精品1区在线| 高清一区二区三区av| 日本韩国欧美超级黄在线观看| 私拍精品福利视频在线一区| 国产精品av久久久久久麻豆网| 欧美日韩少妇| 亚洲精品成人一区| 国产亚洲精品美女久久久久久久久久| 国产精品嫩草影院在线看| 欧美黑人做爰爽爽爽| 精品丝袜久久| 成人精品亚洲| 天堂av在线一区| 91成人在线网站| 久久一区视频| 91精品国产乱码久久久久久久| 免费av一区二区三区四区| 亚洲自拍另类| 国产精品极品国产中出| 亚洲伦乱视频| 伊人国产精品| 国产成人精品福利| 中文字幕成在线观看| 日本不卡一区二区三区| 亚洲午夜在线| 成人台湾亚洲精品一区二区| 韩日一区二区| 91成人在线精品视频| 久久伊人亚洲| 久久久精品网| 亚洲人妖在线| 国产精品麻豆久久| 亚洲欧洲日本mm| 亚洲精品四区| 国产偷自视频区视频一区二区| 国产精品一区二区精品| 日本综合视频| 亚洲一级二级| 日韩视频网站在线观看| 日韩精品高清不卡| 成人精品视频| 中日韩男男gay无套| 少妇高潮一区二区三区99| 日韩精品视频一区二区三区| 蜜桃久久久久| 婷婷综合亚洲| 久久精品一区二区三区中文字幕| 91精品国产成人观看| 国产欧美一区二区精品久久久 | 亚洲天堂黄色| 日韩国产成人精品| 成人看片网站| 欧美综合精品| 影音先锋国产精品| 粉嫩av一区二区三区四区五区 | 国产亚洲一区在线| 精品一区二区三区在线观看视频| 日韩制服丝袜先锋影音| 在线综合亚洲| 一区三区视频| 亚洲欧美专区| 国产美女久久| 色爱av综合网| 狠狠久久婷婷| 欧美交a欧美精品喷水| 狠狠久久婷婷| 亚洲h色精品| 欧美日韩一区二区三区不卡视频 | 丝瓜av网站精品一区二区| 精品高清久久| 免费欧美一区| 99久久久久国产精品| 久久久久久久久久久妇女| 国产精品一区二区免费福利视频| 亚洲色图综合| 亚洲激情中文在线| 精品视频国内| 国产精品中文字幕亚洲欧美| 日韩精品一级二级| 久久一区二区中文字幕| 国产66精品| 精品亚洲a∨一区二区三区18| 日本免费新一区视频| 在线亚洲一区| 香蕉久久99| 特黄毛片在线观看| 久久久免费人体| 国产日韩一区| 日韩不卡一区二区三区| 免费在线观看成人| 午夜av一区| 日韩在线免费| 四虎国产精品免费观看| 粉嫩av一区二区三区四区五区| 久久爱www成人| 欧美亚洲网站| 青青国产精品| 日本aⅴ免费视频一区二区三区| 美国三级日本三级久久99| 性欧美长视频| 免费观看日韩电影| 男女激情视频一区| 中文字幕中文字幕精品| 首页国产欧美日韩丝袜| 视频一区视频二区中文| 三级欧美在线一区| 久久不射网站| 综合激情一区| 日本综合视频| 国产色99精品9i| 国产精品久久久网站| 欧美激情亚洲| 精品99在线| 日产精品一区| 91精品蜜臀一区二区三区在线| 久久久夜夜夜| 午夜久久免费观看| 中文不卡在线| 日本一区二区三区中文字幕| 91一区二区| 精品一区二区三区中文字幕| 国产另类在线| 久久在线电影| 亚洲国产福利| 久久不见久久见国语| 美女在线视频一区| 日本亚洲最大的色成网站www| 青青草视频一区| 国产精品久久亚洲不卡| 久久久久久一区二区| 久久99久久久精品欧美| 国产99亚洲| 国产日韩欧美一区二区三区在线观看 | 少妇精品久久久| 久久青草久久| 日日摸夜夜添夜夜添国产精品| 久久国产三级| 久久不见久久见中文字幕免费 | 中文字幕日韩亚洲| 欧美亚洲三级| 欧美中文一区| 国产精品xx| 老牛影视精品| 久久麻豆精品| 免费视频一区二区三区在线观看| 国产欧美高清视频在线| 丝袜美腿亚洲色图| 日韩精品一卡| 91精品精品| 亚洲国产综合在线看不卡| 精品一区欧美| 久久久五月天| 老司机免费视频一区二区| 鲁大师成人一区二区三区| 999久久久国产精品| 1024精品久久久久久久久| 欧美肉体xxxx裸体137大胆| 国产精品二区不卡| 久久精品播放| 亚洲女同一区| 久久精品亚洲| 国产极品久久久久久久久波多结野| 青青国产精品| 美女久久精品| 免费一级欧美在线观看视频| 久久久精品区| 午夜av成人| 午夜欧美视频| 精品日韩一区| 97se综合| 97欧美在线视频| 国产精品一卡| 91欧美日韩| 亚洲免费专区| 精品一区二区三区中文字幕视频| 久久久噜噜噜| 黄色成人在线网址| 国产精品久久久免费| 日日摸夜夜添夜夜添国产精品| 欧美亚洲综合视频| 久久国产尿小便嘘嘘| 久久99视频| 国产亚洲高清在线观看| 波多野结衣一区| 精品视频一二|