(一)接口:函数类型
1、为了使用接口表示函数类型,我们需要给接口定义一个调用签名
2、对于函数类型的类型检查来说,函数的参数名不需要与接口里定义的名字相匹配
3、函数的参数会逐个进行检查, 如果不指定类型,TypeScript的类型系统会推断出参数类型
interface SearchFunc { //签名
(source: string, subString: string): boolean;
}
//调用接口
let mySearch: SearchFunc;
mySearch = function(source: string, subString: string) {
let result = source.search(subString);
return result > -1;
}
let mySearchs: SearchFunc;
//参数名不匹配
mySearchs = function(src: string, sub: string): boolean {
let result = src.search(sub);
return result > -1;
}
//参数逐个检查
let mySearchb: SearchFunc;
mySearchb = function(src, sub) {
let result = src.search(sub);
return result > -1;
}
js代码:
//调用接口
let mySearch;
mySearch = function (source, subString) {
let result = source.search(subString);
return result > -1;
};
let mySearchs;
//参数名不匹配
mySearchs = function (src, sub) {
let result = src.search(sub);
return result > -1;
};
//参数逐个检查
let mySearchb;
mySearchb = function (src, sub) {
let result = src.search(sub);
return result > -1;
};
(二)接口:可索引的类型
1、描述那些能够“通过索引得到”的类型,比如a[10]或ageMap["daniel"]
2、共有支持两种索引签名:字符串和数字。 可以同时使用两种类型的索引,但是数字索引的返回值必须是字符串索引返回值类型的子类型。
interface StringArray { //索引签名
[index: number]: string;
}
var testFun=function(){
let myArray: StringArray;
myArray = ["Bob", "Fred"];
let myStr: string = myArray[0];
console.log(myStr);
}
testFun();
js代码:
var testFun = function () {
let myArray;
myArray = ["Bob", "Fred"];
let myStr = myArray[0];
console.log(myStr);
};
testFun();
3、索引签名可以设置为只读,这样就防止了给索引赋值
interface ReadonlyStringArray {
readonly [index: number]: string;
}
let myArray: ReadonlyStringArray = ["Alice", "Bob"];
myArray[2] = "Mallory"; // error!
(三)接口:类类型
1、实现接口
interface ClockInterface {
currentTime: Date;
setTime(d: Date);
}
class Clock implements ClockInterface {
currentTime: Date;
setTime(d: Date) {
this.currentTime = d;
}
constructor(h: number, m: number) { }
}
2、类静态部分与实例部分
参考网址:https://www.tslang.cn/docs/handbook/interfaces.html
注意:当一个类实现了一个接口时,只对其实例部分进行类型检查。类的静态部分,不在检查的范围内。