接口定义的是一个属性的类型,声明了一个接口名称,以及的属性:类型; 调用接口时,会对传入的参数,比对接口的属性进行同类检查,不按顺序地检查,同类型则通过编译
常规模式 1 2 3 4 5 6 7 8 9 10 11 12 interface priceValue { price : number } function getPrice (_price:priceValue ) { return _price; }; getPrice({price:100 }); getPrice({price:"100" }); getPrice({name:"xbox" });
只读属性 1 2 3 4 5 6 7 8 9 10 11 12 13 14 interface position { x:number , y:number , readonly z:number } let boyPosition : position = { x:320 , y:540 , z:0 } boyPosition.x = 0 ; boyPosition.z = 100 ;
以下是数组类型的只读约束
1 2 3 4 5 6 7 8 9 let star:ReadonlyArray<string > = ["Jonny" ,"Sonic" ,"HMV" ];let sky:Array <string > = star as Array <string >;
可选模式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 interface list{ A:number ; B?:number ; } function getList (_list:list ) { return _list; }; getList({ A:100 , B:200 }); getList({ A:100 }); getList({ A:100 , C:200 });
索引签名 1 2 3 4 5 6 7 8 9 10 11 12 interface SquareConfig { color?: string ; width?: number ; [propName: string ]: any ; } function createSquare (config: SquareConfig ) { } let mySquare = createSquare({ colour: "red" , width: 100 })
函数的接口 函数的参数名不需要与接口里定义的名字相匹配,如下面的例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 interface position { (x1:number ,x2:number ):boolean ; } let comparison:position; comparison = function (aX,bX ) { if (aX > bX){ return true ; }else { return false ; } }; let result = comparison(20 ,100 );
当传递参数的顺序与接口定义的参数的顺序不同的时候,就会报错1 2 3 4 5 6 7 8 9 10 11 12 interface box { (width:number ,text:string ):string ; } let xbox:box;xbox = function (_width,_text ) { return `${_text} 的边长为${_width} ` }; console .log(xbox(30 ,"watchDog" )); console .log(xbox("watchDog" ,30 ));
索引签名 1 2 3 4 5 6 7 8 9 10 11 12 interface name { [index:number ]:string ; } let nameList:name;nameList = ["Jonny" ,"Candy" ,"Daituo" ,"Lilei" ]; console .log(nameList[1 ]); nameList[4 ] = 20 ; nameList["age" ] = "string" ;
当索引值类型定义为number,实际也会转为string; TypeScript支持两种索引签名:字符串和数字。 可以同时使用两种类型的索引,但是数字索引的返回值必须是字符串索引返回值类型的子类型。 这是因为当使用 number来索引时,JavaScript会将它转换成string然后再去索引对象。 也就是说用 100(一个number)去索引等同于使用”100”(一个string)去索引,因此两者需要保持一致。
1 2 3 4 5 6 7 8 9 10 11 12 class Animal { name: string ; } class Dog extends Animal { breed: string ; } interface NotOkay { [x: number ]: Animal; [x: string ]: Animal; }