接口的概念
提供一个可以继承的,其他变量可以选择使用的范式。
interface LabelledValue {
label: string;
}
function printLabel(labelledObj: LabelledValue) {
console.log(labelledObj.label);
}
let myObj = {size: 10, label: "Size 10 Object"};
printLabel(myObj);
LabelledValue接口就好比一个名字,用来描述上面例子里的要求。 它代表了有一个 label属性且类型为string的对象。 需要注意的是,我们在这里并不能像在其它语言里一样,说传给 printLabel的对象实现了这个接口。我们只会去关注值的外形。 只要传入的对象满足上面提到的必要条件,那么它就是被允许的。
还有一点值得提的是,类型检查器不会去检查属性的顺序,只要相应的属性存在并且类型也是对的就可以。
可选属性
另外接口中的所有类型不都是必须的,可以选择 ?:表示可以省略,但只能在最后出现。
2.key,value 中,可以让[praname:string] :any
表示
只读属性
一些对象属性只能在对象刚刚创建的时候修改其值。 你可以在属性名前用 readonly来指定只读属性:
interface Point {
readonly x: number;
readonly y: number;
}
只读属性readonly 与 const 的 区别
用来作为变量的时候使用const ,readonly用来作为属性
函数类型
接口中的属性类型当然可以包括函数类型,距离如下
interface functionSearch{
(source:string,substring:string):boolean
}
let seach:functionSearch;
seach = function(sub:string){
if(sub.length>5) return true;
else return false;
}
函数类型的参数名并不需要匹配(形参)
索引签名
概念: 索引签名,它描述了对象索引的类型,还有相应的索引返回值类型。
interface StringArray {
[index: number]: string;
}
let myArray: StringArray;
myArray = ["Bob", "Fred"];
let myStr: string = myArray[0];
举例,定义了StringArray接口,它具有索引签名。 这个索引签名表示了当用 number去索引StringArray时会得到string类型的返回值。