# 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
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
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
2
3
4
5
6