美文网首页
typeScript学习的第3天

typeScript学习的第3天

作者: 半瓶不满 | 来源:发表于2019-11-01 10:45 被阅读0次

为什么总在,那些飘雨的日子,深深的把你忘记。每一个周一,都是难受的,本想周末好好休息放松,结果比上班还累,拖着疲惫的身体,估计得熬到周三,才能缓过来,然后就又周末了,写了个死循环,你说气不气。需要个生活鼓励师啊啊啊啊啊啊啊啊啊啊

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 两个关键字因为其功能比较接近:

  1. interface 的特点:
  • 同名interface自动聚合,也可以和已有的同名class聚合,适合做polyfill
  • 自身只能表示object/class/function的类型
  1. 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
}

相关文章

网友评论

      本文标题:typeScript学习的第3天

      本文链接:https://www.haomeiwen.com/subject/bmmvvctx.html