# extends

type U = {
    name: string;
    sex:string;
    age: number
}
type T = {
    name: string;
    sex:string;
    age: number;
    age1: number
}

type IsTrue = T extends U ? true : false

 T extends U 表示 T类型可分配给U类型,所以T类型字段必须包含所有的U类型的所有字段,
 只能多,不能少。


 就是说,如果 T 的最宽松的实例化不能分配给 U 的最宽松的实例化,那么就是false
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 联合类型的条件继承判断


type TypeName<T> = T extends string
  ? "string"
  : T extends number
  ? "number"
  : T extends boolean
  ? "boolean"
  : T extends undefined
  ? "undefined"
  : T extends Function
  ? "function"
  : "object";
type T0 = TypeName<string>; // "string"
type T1 = TypeName<"a">; // "string"
type T2 = TypeName<true>; // "boolean"
type T3 = TypeName<() => void>; // "function"
type T4 = TypeName<string[]>; // "object"


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

在TypeName 中当类型参数 T是 A | B | C

该语句将表示为 (A extends U ? X : Y) | (B extends U ? X : Y) | (C extends U ? X : Y).



type T10 = TypeName<string | (() => void)>; // "string" | "function"
type T12 = TypeName<string | string[] | undefined>; // "string" | "object" | "undefined"
type T11 = TypeName<string[] | number[]>; // "object"

1
2
3
4
5
6

# 好文推荐