- 对象的形状进行描述
- 对类的行为进行抽象
基本
```javascript interface Person{ //默认不可多不可少 name:string; readonly id:number; //只读 age?:number; //可少
}
<a name="RH6Gk"></a>### 函数注解函数```javascript1.interface Func{(x:string,y:number)=>boolean;}2.type Func = (x:string,y:number)=>boolean;区别?let fun:Func = function(a,b){...};
可索引的类型
基本使用
interface numberArray{[index:number]:string;}let n:numberArray = ['2','x','ttt']
class Dog extends Animal{ breed:string; }
//报错 使用’string’索引有时会得到animal interface BigDog{
[x:number]:Animal;
}
//改成 interface BigDog{
[x:string]:Animal;
}
索引number会转化成字符串,所以number包含字符串<a name="RcgLO"></a>#### 索引签名```javascriptinterface Num{name:string;length:number; //报错[index:string]:string;}可以改为interface Num{name:string;length:number;[index:string]:string|number;}
类类型接口
类实现接口
implements实现关键词
对类的行为进行抽象
有点类似抽象类
interface Light{lighton(d:Date):void;lightoff(d:Date):void;}interface Tire{...}基类class Car{...}class BaoMa extends Car implements Light, Tire{... //要去实现具体的方法}let acar = new Baoma('my car')
类静态部分和实例部分
因为当一个类实现了一个接口时,只对其实例部分进行类型检查。 constructor存在于类的静态部分,所以不在检查的范围内。所以需要分开检查。
类静态部分检查需要通过函数实现
接口继承接口
interface X{x:string;}interface Y{y:string;}interface Z extends X,Y{ 接口继承多个接口z:string;}需要通过推论的方式创建let a = <Z>{}a.x = 'helloTS'
接口混合类型
接口继承类
很多别的语言不支持
