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

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

TypeScript條件類型示例全面講解

瀏覽:95日期: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久久,三上悠亚国产精品一区二区三区
欧美亚洲日本精品| 欧美sss在线视频| 久久人人97超碰国产公开结果| 国产精品天堂蜜av在线播放| 日韩高清在线不卡| 日韩区欧美区| 日韩国产欧美三级| 免费人成黄页网站在线一区二区| 久久久久蜜桃| 日韩一区二区免费看| 蜜桃av一区二区三区电影| 亚洲我射av| 久久国产人妖系列| 日韩a一区二区| 九一精品国产| 伊人www22综合色| 欧美在线精品一区| 精品99在线| 婷婷亚洲综合| 热久久免费视频| 欧美一级二级三级视频| 免费在线观看一区| 岛国av在线网站| 免费观看不卡av| 日本午夜精品久久久| 国产日韩电影| 亚洲精品乱码久久久久久蜜桃麻豆| 国产精品白丝av嫩草影院| 日本久久成人网| 日韩不卡在线观看日韩不卡视频| 国产夫妻在线| 日韩在线黄色| 成人久久一区| 91亚洲精品在看在线观看高清| 日韩免费福利视频| 欧美日本精品| 好吊一区二区三区| 国产亚洲精品美女久久 | 美女视频一区在线观看| 欧美日韩国产在线观看网站| 国产欧美日韩视频在线 | 日韩精品午夜视频| 成人久久一区| 久久精品国产99国产精品| 蜜桃视频在线观看一区| 亚洲成人一区在线观看| 中文字幕一区二区三区日韩精品 | 午夜精品福利影院| 亚洲少妇自拍| 成人日韩在线| 福利视频一区| 国产精品久久| 热久久久久久| 欧美偷窥清纯综合图区| 综合视频一区| 日韩亚洲精品在线观看| 亚洲精品在线观看91| 国产一区福利| 欧美aa在线视频| 国产精品欧美在线观看| 国产日产一区| 国产精品一区二区三区av麻| 青青伊人久久| 国产精品激情电影| 国产探花一区二区| 国产精品多人| 国产传媒在线观看| 日韩天堂在线| 一区在线免费| 日韩精品国产精品| 欧美精品中文字幕亚洲专区| 国产精品777777在线播放 | 欧美丰满日韩| 91精品一区国产高清在线gif| 激情视频网站在线播放色| 成人精品久久| 激情五月综合| 日本一区中文字幕| 美女久久精品| 美女网站一区| 亚洲毛片在线| 精品福利久久久| 自拍日韩欧美| 欧美中文一区| av一区在线| 亚洲欧美专区| 国产精品亚洲片在线播放| 青青青免费在线视频| 巨乳诱惑日韩免费av| 国产黄色一区| 久久高清国产| 成人在线超碰| 一区二区亚洲视频| 国产色播av在线| 免费人成在线不卡| 欧美国产一级| 青青草国产精品亚洲专区无| 久久狠狠婷婷| 国产精品丝袜在线播放| 好吊一区二区三区| 精品一区二区三区的国产在线观看| 日韩精品中文字幕第1页| 午夜电影一区| 欧美特黄a级高清免费大片a级| 美女视频免费精品| 日韩1区2区3区| 亚洲激情黄色| 日韩毛片视频| 国产精品jk白丝蜜臀av小说| 免费日韩视频| 91九色精品| 欧洲精品一区二区三区| 国产精品巨作av| 日韩一区二区三区高清在线观看| 欧美午夜精彩| 日韩国产激情| 免费在线播放第一区高清av| 国产精品美女久久久浪潮软件| 国产99在线| 成人在线视频中文字幕| 麻豆精品视频在线观看视频| 国产欧美高清视频在线| 日韩激情啪啪| 亚州欧美在线| 亚洲1区在线观看| 亚洲精品综合| 亚洲免费毛片| 日韩av一级片| 国产图片一区| 牛牛精品成人免费视频| 美女在线视频一区| 久久av资源| 鲁大师精品99久久久| 精品一区二区三区中文字幕 | 久久不卡日韩美女| 国产日韩欧美三区| 麻豆精品新av中文字幕| 精品国产美女a久久9999| 久久影院资源站| 日韩电影免费在线观看| 免费久久精品| 免费在线观看不卡| 欧美日韩国产一区二区在线观看| 国产欧美自拍一区| 国产精品高潮呻吟久久久久| 日韩av在线中文字幕| 午夜免费一区| 亚洲三级网址| 久久亚洲黄色| 免费av一区二区三区四区| 亚洲资源网站| 精品一区二区三区亚洲| 欧美二区视频| 国产精品欧美在线观看| 日韩欧美一区二区三区免费看| 欧美日韩国产高清| 国产精品网在线观看| 91精品国产91久久久久久黑人| 在线免费观看亚洲| 久久精品凹凸全集| 中文另类视频| 国产精品一区二区免费福利视频| 色吊丝一区二区| 日本三级亚洲精品| 91九色精品国产一区二区| 国产精品一区二区三区四区在线观看 | 亚洲1234区| 欧美日本久久| 1000部精品久久久久久久久| 国产情侣一区在线| 99热精品在线观看| 欧美韩日一区| 91免费精品国偷自产在线在线| 91精品韩国| 国产精品一页| 亚洲日本久久| 不卡在线一区| 欧美日韩视频免费观看| 国产伦精品一区二区三区视频| 亚洲一区区二区| 免费在线小视频| 久久亚洲精精品中文字幕| 日本伊人午夜精品| 免费观看日韩电影| 99在线精品免费视频九九视| 欧美亚洲国产激情| 色爱综合网欧美| 麻豆精品99| 国产欧美日韩免费观看| 日韩va亚洲va欧美va久久| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 99久久婷婷| 婷婷成人在线| 精品欧美一区二区三区在线观看| 欧美少妇精品| 九九久久婷婷| 伊人影院久久| 免费视频一区二区| 99视频+国产日韩欧美| 日韩视频久久|