一. 接口(interface)是什么
接口就是用代码描述对象必须有什么属性(包括方法),可以理解为”要求”;
是用来描述对象的
举例:
例一:
1 2 3 4 5 6
   |  interface Human{     name : string,     age : number } let lisle:Human = {name:'lisle',age : 20}
 
  | 
 
例二
1 2 3 4 5 6 7 8 9 10
   | interface Human{     name : string;     age : number;     say(word:string):void;     shape: Shape; } interface Shape{     body:string;     head : string; }
  | 
 
二. 接口(interface)的特性
interface描述只读属性
1 2 3 4
   | interface Human{     readonly sex : string;     name : string }
  | 
 
interface描述可选属性
1 2 3 4 5
   | interface Human{     readonly sex : string;     name : string;     play?: string }
  | 
 
如果传了interface之外的属性怎么办
方法一. 使用类型断言
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
   |  interface Human{     name : string;     age : number; }
  let zhangsan:Human = {     name : '',     age : 20,     opacity : 1 } as Human
  let zhangsan:Human = <Human>{     name : '',     age : 20,     opacity : 1 }
 
  | 
 
方法二. 使用索引签名
1 2 3 4 5
   | interface Human{     name : string;     age : number;     [propName:string] : any  }
  | 
 
三. 接口(interface)的用法
修饰对象
1 2 3 4 5 6 7
   | interface Obj{     name : string;     age : number;     say(word:string):void; }
  let obj:Obj = {name : 1,age : 2}
  | 
 
修饰函数
接口修饰函数的时候,接口里面是没有函数名的;
注意下和修饰对象,然后对象有个属性是函数的区别
1 2 3 4 5 6 7 8 9 10 11 12
   | interface SearchFunc{     (source:string,subString:string):boolean }
  var mySearch : SearchFunc = function(source:string,subString:string){     let result = source.search(subString);     if(result != -1){         return true;     }else{         return false;     } }
  | 
 
当然,函数类型一般不会这么写,一般还是下面的写法
1 2 3
   | let fn:(name:string)=>number = function(name:string){     return name.length; }
  | 
 
修饰数组
1 2 3 4 5 6
   | interface StringArray{
      [index:number]:string;   }
  var myArray:StringArray = ["ime","lily"];
  | 
 
当然,数组一般不会这么写;会采用Array<number>或者number[]
修饰类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
   | interface ClockInterface{     currentTime : Date;     setTime(d:Date):string }  
  class Clock implements ClockInterface{     currentTime : Date;     setTime(d:Date){         this.currentTime = d;         return 'ready';     }     constructor(h:number,m:number){              } }
  |