ts常用内置工具类型
生活随笔
收集整理的這篇文章主要介紹了
ts常用内置工具类型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Partial
源碼:
type Partial<T> = {[P in keyof T]?: T[P];};作用:
Partial 可以快速把某個接口類型中定義的屬性變成可選的 (Optional)
Readonly
?源碼:
type Foo = {readonly bar: number;bas: number; }const foo: Foo = {bar: 123, bas: 123}; foo.bar = 1 //不能將1分配到foo.bar,因為foo.bar屬性是只讀的。 foo.bas = 1interface Foo{readonly bar: number;bas: number; }const foo: Foo = {bar: 123, bas: 123}; foo.bar = 1 //不能將1分配到foo.bar,因為foo.bar屬性是只讀的。 foo.bas = 1作用:
readonly用于標記一個屬性是只讀的,也就是不可修改的。
Record
?源碼:
interface PageInfo {title: string; }type Page = "home" | "about" | "contact";const nav: Record<Page, PageInfo> = {about: { title: "about" },contact: { title: "contact" },home: { title: "home" }, };作用:
Record用于定義一個對象的 key 和 value 類型
?
Pick
?源碼:
type Pick<T, K extends keyof T> = {[P in K]: T[P]; };interface Person {name: string;age: number;id: number;sex: 0 | 1; }// 問女生年紀不太禮貌,所以我們不需要 age 這個屬性 type Woman = Pick<Person, "name" | "id">;// 此時 Woman 等效于 Femaleinterface Female {name: string;id: number; }作用:
采集,Record用于定義一個對象的 key 和 value 類型
?
Omit
?源碼:
type Omit<T, K extends string | number | symbol> = {[P in Exclude<keyof T, K>]: T[P]; };interface User {id: number;name: string;age: number;sex: 0 | 1;tel: number; }type EditUser = Omit<User, "id">; // 就是在 User 的基礎上,去掉 id 屬性作用:
省略/剔除,Omit?與?Pick?作用相似,只不過?Omit?是:以一個類型為基礎支持剔除某些屬性,然后返回一個新類型。
?
Exclude
?源碼:
type Exclude<T, U> = T extends U ? never : T;interface Person {name: string; }interface NewPerson {name: string;age: number;id: number; }// 案例1 // Person如果extends繼承NewPerson(繼承了NewPerson的屬性),就never異常,否則就返回Person const obj: Exclude<Person, NewPerson> = {name: '' }作用:
排除/不包括
Extract
?源碼:
type Extract<T, U> = T extends U ? T : never;interface Person {name: string; }interface NewPerson {name: string;age: number;id: number; }// 案例1 // NewPerson如果extends繼承Person(繼承了Person的屬性),就返回NewPerson,否則就never異常 const obj: Extract<NewPerson, Person> = {name: '',age: 1,id: 1 }作用:
提取/包括
NonNullable
?源碼:
type NonNullable<T> = T extends null | undefined ? never : T作用:
NonNullable工具類型可以從類型 T 中剔除 null 和 undefined 類型,并構建一個新的類型
ReturnType
?源碼:
type ReturnType<T extends (...args: any) => any> = T extends (...args: any) => infer R ? R : any;type T0 = ReturnType<() => string>; // stringtype T1 = ReturnType<() => { a: string, b: number }>; // { a: string; b: number }作用:
ReturnType工具類型能獲取函數類型 T 的返回值類型
?
InstanceType
?源碼:
type InstanceType<T extends abstract new (...args: any) => any> = T extends abstract new (...args: any) => infer R ? R : any;class A {x = 0;}type T0 = InstanceType<typeof A>; // Atype T1 = InstanceType<new (s?: string) => object>; // object作用:
InstanceType能獲取構造函數的返回值類型
總結
以上是生活随笔為你收集整理的ts常用内置工具类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机新疆一级考试成绩查询i,新疆计算机
- 下一篇: Eurofins欧陆科技集团颁发全球首张