Typescript类型推断技巧你知道么?

extends 继承

export type Extends = T extends U;
复制代码

readonly 只读

export type Readonly = { readonly [P in keyof T]: T[P] };
复制代码

is

export type IsType = (val: any) => val is T;
复制代码

场景:判断是否属于某个或某类值

// 是否object
export const isObj: IsType;
// 是否number
export const isNumber: IsType;
// 是否string
export const isString: IsType;
复制代码

keyof 键值

export type KeyOf = keyof T;
复制代码

利用K extends keyof WindowEventMap将参数type:K限制在WindowEventMap的键值列表,listener中的参数ev限定为WindowEventMap对应K相应的值

declare function addEventListener(type: K, listener: (this: Window, ev: WindowEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
复制代码

in 在*中

export type Partial = { [P in keyof T]?: T[P] };
复制代码

? 二义符

export type Extract = T extends U ? T : never;
复制代码

& 合并

export type Merge = T & U;
复制代码

实用

export type IsTypeany> = (val: any) => val is T;
export type KeyOf = keyof T;
export type Defaultize = P extends any
  ? string extends keyof P
    ? P
    : Pick> &
        Partial>> &
        Partial>>
  : never;
export type Omitextends keyof T> = Pick>;
export type Matching = {
  [P in keyof DecorationTargetProps]: P extends keyof InjectedProps
    ? InjectedProps[P] extends DecorationTargetProps[P]
      ? DecorationTargetProps[P]
      : InjectedProps[P]
    : DecorationTargetProps[P]
};

export type MergePropTypes = P & Pick>;
export type Partial = { [P in keyof T]?: T[P] };
export type Required = { [P in keyof T]-?: T[P] };
export type Readonly = { readonly [P in keyof T]: T[P] };
export type Pickextends keyof T> = { [P in K]: T[P] };
export type Recordextends keyof any, T> = { [P in K]: T };
export type Exclude = T extends U ? never : T;
export type Extract = T extends U ? T : never;
export type NonNullable = T extends null | undefined ? never : T;


export type ReturnTypeextends (...args: any[]) => any> = T extends (
  ...args: any[]
) => infer R
  ? R
  : any;
export type InstanceType<
  T extends new (...args: any[]) => any
> = T extends new (...args: any[]) => infer R ? R : any;
复制代码

你可能感兴趣的:(javascript)