TypeScript
Partial :使每个属性变为可选
interface A { // interface A {
id: number; // id?: number
name: string; // name?: string
age: number; // age?: number
} // }
type PartialA = Partial<A>;
Record : 构造一个具有一组属性 K(类型 T)的类型。
enum Methods { // type IRouter = {
GET = "get", // get: (req: IncomingMessage, res: ServerResponse)
POST = "post", // post: (req: IncomingMessage, res: ServerResponse)
DELETE = "delete", // delete: (req: IncomingMessage, res: ServerResponse)
PUT = "put", // put: (req: IncomingMessage, res: ServerResponse)
} // }
type IRouter = Record<Methods, (req: IncomingMessage, res: ServerResponse) => void>;
Pick : 从 T 中,选择一组键在并集 K 中的属性。实际就是说在原有的类型 T 上 筛选出想要的全部或极个别的属性和类型
interface B { // type PickB = {
id: number; // id: number
name: string; // name: string
age: number; // }
} // 筛选想要的
type PickB = Pick<B, "id" | "name">;
Omit :作用与Pick相反,Omit是排除一个字段,剩下的所有,
interface C { // type OmitC = {
id: number; // name: string
name: string; // age: number
age: number; // }
} // 排除想要排除的
type OmitC = Omit<C, "id">;
readonly:声明为只读属性
Readonly<Type>用来构建一个类型,将Type所有属性都设置为readonly
interface B {
readonly name
}
let obj: B = {
name: 1
}
obj.name = 2 // 无法分配到 "name", 因为它是只读属性。
key in : 映射类型
type PropsKeys = 'a' | 'b' | 'c'
type Type2 = {
[Key in PropsKeys]: number //映射类型只能在 `type` 类型别名中使用们不能在 `interface` 接口中使用
}
/**
* type Type2 = {
* a: number;
* b: number;
* c: number;
* }
*/
type PropsKeys1 = { // type Type3 = {
label: string // label: number;
value: number // value: number;
} // }
type Type3 = { // keyof 获取对象类型中的key
[Key in keyof PropsKeys1]: number
}