TypeScript 高级使用

53 阅读1分钟

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
}