keyof
獲取類型內(nèi)所有的 key,即所有屬性名 , 獲取的是一個(gè) 聯(lián)合類型
這里類型指:通過(guò) interface 或 type 定義的類型;通過(guò) typeof xxx 返回的類型等。keyof 后面必須是類型,不能是具體的對(duì)象
interface IPeople {
name:string,
age?: number,
sex: string,
}
type T = keyof IPeople
// 等同于
type T = "name" | "age" | "sex"
in
循環(huán)類型 一般循環(huán)的是 聯(lián)合類型,把聯(lián)合類型中每一個(gè)屬性名賦值給 P
// 使用上面的 T 類型
type TObj = {
[P in keyof T]: any
}
// 等同于
type TObj = {
name: any;
age: any;
sex: any;
}
typeof
ts 中 typeof 是獲取數(shù)據(jù)的類型,常用用于獲取 對(duì)象、數(shù)組、函數(shù)、class、枚舉等類型
const people = {
name: 'liuyz',
age: 18,
}
type INewPeople = typeof people
// 等同于
// type INewPeople = {
// name: number
// age: number
// }
const newPeople: INewPeople = {
name: "zhi",
age: 18,
}
type TKeys = keyof typeof newPeople
// 等同于
// type TKeys = "name" | "age"
Pick
從 T 類型中選取部分 K 類型,并返回新的類型,這里 T 常用于對(duì)象類型
type Pick<T, K extends keyof T> = {
[P in K]: T[P];
};
// keyof T 獲取 T 中所有的 key 屬性
//K extends keyof T K 必須繼承于 keyof T ,如果 K 中的屬性有不屬于 keyof T 的則會(huì)報(bào)錯(cuò)
interface IPeople {
name:string,
age?: number,
sex: string,
}
type TPick = Pick<IPeople, 'name' | 'age'>
// 等同于
type TPick = {
name: string;
age?: number | undefined;
}
Partial
將T中的所有屬性設(shè)置為可選
type Partial<T> = {
[P in keyof T]?: T[P];
};
interface IPeople {
name:string,
age?: number,
sex: string,
}
type TPartial = Partial<IPeople>
// 等同于
type TPartial = {
name?: string | undefined;
age?: number | undefined;
sex?: string | undefined;
}
Required
使 T 中的所有屬性都變成必需的
interface IPeople {
name:string,
age?: number,
sex: string,
}
type TRequired = Required<IPeople>
// 等同于
type TRequired = {
name: string;
age: number;
sex: string;
}
Readonly
將 T 中的所有屬性設(shè)為只讀
<!-- 源碼 -->
type Readonly<T> = {
readonly [P in keyof T]: T[P];
}
interface IPeople {
name:string,
age?: number,
sex: string,
}
type TReadonly = Readonly<IPeople>
// 等同于
type TReadonly = {
readonly name: string;
readonly age?: number | undefined;
readonly sex: string;
}
Exclude
從T中剔除可以賦值給U的類型
Extract
提取T中可以賦值給U的類型
Omit
// 就是在 User 的基礎(chǔ)上,去掉 id 屬性
type EditUser = Omit<User,"id">;
Pick
從類型定義的屬性中,選取指定一組屬性,返回一個(gè)新的類型定義。
type Pick<T, K extends keyof T> = {
[P in K]: T[P];
};
NonNullable
去除 null 和 undefined 后的新類型
type TType= number | null | undefined
type TNonNullable = NonNullable<TType>
// 等同于
// type TNonNullable = number
typeof
- 自動(dòng)生成對(duì)象的類型,如果對(duì)象上有類型則使用定義的類型