1. 对象的形状进行描述
  2. 对类的行为进行抽象

    基本

    ```javascript interface Person{ //默认不可多不可少 name:string; readonly id:number; //只读 age?:number; //可少

}

  1. <a name="RH6Gk"></a>
  2. ### 函数
  3. 注解函数
  4. ```javascript
  5. 1.
  6. interface Func{
  7. (x:string,y:number)=>boolean;
  8. }
  9. 2.
  10. type Func = (x:string,y:number)=>boolean;
  11. 区别?
  12. let fun:Func = function(a,b){
  13. ...
  14. };

可索引的类型

这里不太懂

基本使用

  1. interface numberArray{
  2. [index:number]:string;
  3. }
  4. let n:numberArray = ['2','x','ttt']
  1. 共支持两种索引签名:字符串和数字
  2. 索引签命类似老大的作用

    注意

    ```javascript class Animal{ name:string; }

class Dog extends Animal{ breed:string; }

//报错 使用’string’索引有时会得到animal interface BigDog{

  1. [x:number]:Animal;

}

//改成 interface BigDog{

  1. [x:string]:Animal;

}

  1. 索引number会转化成字符串,所以number包含字符串
  2. <a name="RcgLO"></a>
  3. #### 索引签名
  4. ```javascript
  5. interface Num{
  6. name:string;
  7. length:number; //报错
  8. [index:string]:string;
  9. }
  10. 可以改为
  11. interface Num{
  12. name:string;
  13. length:number;
  14. [index:string]:string|number;
  15. }

类类型接口

类实现接口

implements实现关键词
对类的行为进行抽象
有点类似抽象类

  1. interface Light{
  2. lighton(d:Date):void;
  3. lightoff(d:Date):void;
  4. }
  5. interface Tire{
  6. ...
  7. }
  8. 基类
  9. class Car{
  10. ...
  11. }
  12. class BaoMa extends Car implements Light, Tire{
  13. ... //要去实现具体的方法
  14. }
  15. let acar = new Baoma('my car')

类静态部分和实例部分

因为当一个类实现了一个接口时,只对其实例部分进行类型检查。 constructor存在于类的静态部分,所以不在检查的范围内。所以需要分开检查。
类静态部分检查需要通过函数实现

接口继承接口

  1. interface X{
  2. x:string;
  3. }
  4. interface Y{
  5. y:string;
  6. }
  7. interface Z extends X,Y{ 接口继承多个接口
  8. z:string;
  9. }
  10. 需要通过推论的方式创建
  11. let a = <Z>{}
  12. a.x = 'helloTS'

接口混合类型

函数类型的interface

接口继承类

很多别的语言不支持