为什么总在,那些飘雨的日子,深深的把你忘记。每一个周一,都是难受的,本想周末好好休息放松,结果比上班还累,拖着疲惫的身体,估计得熬到周三,才能缓过来,然后就又周末了,写了个死循环,你说气不气。需要个生活鼓励师啊啊啊啊啊啊啊啊啊啊
interface 和 type 关键字
在TypeScript中的表现:
interface A {
a: string
b: number
}
type B = {
b: number
c: number[]
}
type C = A | B; // C类型的变量的键只需包含ab或bc即可,当然也可以abc都有
type D = A & B; // D类型的变量的键必需包含abc
对于这种表现,可以这样理解:&表示必须同时满足多个契约,|表示满足任意一个契约即可。
interface 和 type 两个关键字因为其功能比较接近:
- interface 的特点:
- 同名interface自动聚合,也可以和已有的同名class聚合,适合做polyfill
- 自身只能表示object/class/function的类型
- type的特点:
- 表达功能更强大,不局限于object/class/function
- 要扩展已有type需要创建新type,不可以重名
- 支持更复杂的类型操作
type Tuple = [number, string];
const a: Tuple = [2, 'sir'];
type Size = 'small' | 'default' | 'big' | number;
const b: Size = 24;
基本上所有用interface表达的类型都有其等价的type表达。也有只能用interface表达,无法用type表达,那就是往函数上挂载属性。
extends 关键字
extends本意为“拓展”,也有人称其为“继承”。在TypeScript中,extends既可当作一个动词来扩展已有类型;也可当作一个形容词来对类型进行条件限定(例如用在泛型中)。在扩展已有类型时,不可以进行类型冲突的覆盖操作。例如,基类型中键a为string,在扩展出的类型中无法将其改为number。
type A = {
a: number
}
interface AB extends A {
b: string
}
// 与上一种等价
type TAB = A & {
b: string
}