-
Notifications
You must be signed in to change notification settings - Fork 21
Open
Description
extends
- 接口继承
interface T1 {
name: string;
}
interface T2 {
age: number;
}
interface T3 extends T1, T2 {
sex: string;
}- 条件判断
interface Animal {
eat(): void;
}
interface Dog extends Animal {
bite(): void;
}
// 如果前面的类型可以赋值给后面的类型,则为 true
type A = Dog extends Animal ? string : number; // string- 泛型用法
type A1 = 'x' extends 'x' ? string : number; // string
type A2 = 'x' | 'y' extnds 'x' ? string : number; // number
type P<T> = T extends 'x' ? string : number;
type A3 = P<'x' | 'y'>; // string | number; 满足分配律,被拆开赋值,type A3 = 'x' extends 'x' | 'y' extends 'x'
type A4 = never extends 'x' ? string : number; // string
type P1<T> = T extends 'x' ? string : number;
type A5 = P1<never>; // never,在条件分配类型中 never 被认为是空的联合类型
type P2<T> = [T] extends ['x'] ? string : number; // 通过 [] 阻止条件分配类型
type A6 = P2<"x" | 'y'>; // number
type A7 = P2<never>; // string,never 被认为是所有类型的子类型
type Exclude<T, U> = T extends U ? never : T;
type B = Exclude<'key1' | 'key2', "key2"> // 相当于 type B = Exclude<key1, key2> | Exclude<key2, key2>
type Extract<T, U> = T extends U ? T : never;
type C = Extract<'key1' | 'key2', 'key2'> // 相当于 type C = Extract<key1, key2> | Extract<key2, key2>
type Pick<T, K extends keyof T> = {
[P in K]: T[P]
}type vs interface
- 都可以用于描述对象或方法签名,语法不同
interface Point {
x: number;
y: number;
}
interface SetPoint {
(x: number, y: number): void;
}
type Point = {
x: number;
y: number;
};
type SetPoint = (x: number, y: number) => void;- type 可以用作其他 type 的类型别名,interface 不可以
type Name = string;
type X = { x: number };
type Y = { y: number };
type Z = X | Y;
type D = [X, Y];- 都可以进行扩展,且可以互相扩展
interface X {
x: number;
}
interface Point extends X {
y: number;
}
-----
type X = { x: number };
type Point = X & { y: number };
----
interface X {
x: number;
}
type Point = X & { y: number };
----
type X = { x: number };
interface Point extends X {
y: number;
}- interface 声明会被合并
interface Point {
x: number;
}
interface Point {
y: number;
}
const p: Point = { x: 0, y: 0 };Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels