TS系列教程十一:interface

100 阅读1分钟

简介

interfance,中文名叫接口,是为了定义对象类型而生的

interface Person{
    name:string,
    age:number
}

任何实现了这个接口的对象,都必须满足规定的类型

const person:Person={
    name:'Tom',
    age:18,
    hobby:'打篮球'//报错
}

同样的它也有可选属性和只读属性、也可以通过[]拿到属性的类型

interface Person{
    readonly name:string,
    age?:number
}
type a=Person['name']

格式和type别名一样的

interface可以包含 对象的属性、属性索引,对象方法,函数、构造函数

//对象属性
interface Person{
    name:string,
    age:number
}
//对象属性索引
interface Person{
    [property:string]:string
}
//对象方法
interface Person{
    fn(a:string):void
}
//函数
interface Person{
    (x:number, y:number): number;
}

继承 extends

interface Animals{
    name:string
}
interface Cat extends Animals{
    legsNum:number
}

接口可以使用extend继承另外的接口,接口之间属性名不能重复

type Animals={
    name:string
}
interface Cat extends Animals{
    legsNum:number
}

接口也可以继承type定义的类型

interface和type的爱恨情仇

爱和情

  1. 都可以定义对象。

恨与仇

  1. interface只能定义对象,而type可以定义基础类型、数组、元组。
  2. 多个同名interface会合并,type会报错。
  3. interface有继承,type只能& 总结:type要比interface强大,interface有更好的扩展性,建议优先选择