每天学一点 TS

关联面试卡(快速跳转)

Parameters<T>获取构造函数的参数类型

interface AConstructor {
  new(a: number): string[];
}

type A1 = ConstructorParameters<AConstructor> // [number]
1
2
3
4
5

extends(条件类型)

T extends U ? X : Y
1

Partial <T>,让属性都变成可选的

type A = { a: number, b: string }

type A1 = Partial<A> // { a?: number; b?: string;}
1
2
3

Required<T>,让属性都变成必选

type A = { a?: number, b?: string }

type A1 = Required<A> // { a: number; b: string;}
1
2
3

Pick<T,K>,只保留自己选择的属性,U 代表属性集合

type A = { a: number, b: string }

type A1 = Pick<A, 'a'> // {a:number}
1
2
3

Omit<T,K>实现排除已选的属性

type A = { a: number, b: string }

type A1 = Omit<A, 'a'> // {b:string}
1
2
3

Record<K,T>, 创建一个类型,T 代表键值的类型, U 代表值的类型

type A1 = Record<string, string> // 等价{[k:string]:string}
1

Record<K,T>, 创建一个类型,T 代表键值的类型, U 代表值的类型

type A1 = Record<string, string> // 等价{[k:string]:string}
1

Exclude<T,U>, 过滤 T 中和 U 相同(或兼容)的类型

type A = { a: number, b: string }

type A1 = Exclude<number | string, string | number[]> // number

// 兼容

type A2 = Exclude<number | string, any | number[]> // never , 因为any兼容number, 所以number被过滤掉
1
2
3
4
5
6
7

Extract<T,U>, 提取 T 中和 U 相同(或兼容)的类型

type A = { a: number, b: string }

type A1 = Extract<number | string, string | number[]> // string
1
2
3

NonNullable <T>, 剔除 T 中的 undefined 和 null

type A1 = NonNullable<number | string | null | undefined> // number|string
1

ReturnType<T>, 获取 T 的返回值的类型

type A1 = ReturnType<() => number> // number
1

InstanceType<T>, 返回 T 的实例类型 ????

interface A {
  a: HTMLElement;
}

interface AConstructor {
  new(): A;
}

function create(AClass: AConstructor): InstanceType<AConstructor> {
  return new AClass()
}
1
2
3
4
5
6
7
8
9
10
11

Parameters<T> 获取函数参数类型

interface A {
  (a: number, b: string): string[];
}

type A1 = Parameters<A> // [number, string]
1
2
3
4
5

ConstructorParameters <T> 获取构造函数的参数类型

// 和Parameters类似, 只是T这里是构造函数类型.

interface AConstructor {
  new(a: number): string[];
}

type A1 = ConstructorParameters<AConstructor> // [number]
1
2
3
4
5
6
7

extends(条件类型)


T extends U ? X : Y

type A = string extends '123' ? string :'123' // '123'

type B = '123' extends string ? string :123 // string

1
2
3
4
5
6
7

infer(类型推断) ???


export type Tail<Tuple extends any[]> = ((...args: Tuple) => void)

extends ((a: any, ...args: infer T) => void) ? T : never;

1
2
3
4
5
上次更新:
(adsbygoogle = window.adsbygoogle || []).push({});