接口简介:
原则:对值所具有的结构进行类型检查(核心原则之一)。 它有时被称做“鸭式辨型法”或“结构性子类型化;
作用:为这些类型命名和为你的代码或第三方代码定义契约。
语法:声明关键字,interface ,代码实例如下:声明一个接口 IPerson,定义属性字段:name,age和可选属性字段:sex,同时定义一个SayHi()方法,在定义一个Student类实现(关键字:implements)IPerson接口。
隐式接口:
//声明接口
interface Count{
num1: number;
num2: number;
}
function Add(para:Count) {
return para.num1 + para.num2;
}
//对比,para参数为接口类型(隐式接口)
function Add2(para:{
num1: number;
num2: number;
}) {
return para.num1 + para.num2;
}
当接口中只包含一个方法时,接口可以当作方法类型实现:
//接口声明
interface Count{
(num1: number, num2: number): number; //匿名函数类型,形参number,返回值number
}
//接口实现
let add: Count = function (a,b) {
return a + b;
}
使用<接口类型>{}隐式声明一个匿名对象实现接口:
//声明接口
interface Count{
num1: number;
num2: number;
}
//隐式声明一个匿名对象,实现接口
let myCount = <Count>{};
myCount.num1 = 10;
myCount.num2 = 20;
接口支持多继承(关键字:extends),接口之间也可以相互继承,创建出多个接口的合成接口;
//声明接口
interface Shape {
color: string;
}
//接口继承接口
interface Square extends Shape {
sideLength: number;
}
//隐式匿名对象实现接口Square
let square = <Square>{};
square.color = "blue";
square.sideLength = 10;
//声明接口
interface Shape {
color: string;
}
//声明接口
interface PenStroke {
penWidth: number;
}
//声明接口,继承多个接口
interface Square extends Shape, PenStroke {
sideLength: number;
}
//隐式匿名对象实现接口Square
let square = <Square>{};
square.color = "blue";
square.sideLength = 10;
square.penWidth = 5.0;
混合类型:一个对象可以同时做为函数和对象使用,并带有额外的属性。
interface Counter {
(start: number): string;
interval: number;
reset(): void;
}
function getCounter(): Counter {
let counter = <Counter>function (start: number) { };
counter.interval = 123;
counter.reset = function () { };
return counter;
}
let c = getCounter();
c(10);
c.reset();
c.interval = 5.0;
关于readonly
vsconst
:当声明变量为常量时使用 const,当声明只读属性时使用 readonly。
总结:
1.在接口中可以包含属性、方法;
2.使用关键字 interface 定义接口;
3.属性可以使用符号"?"标识为可空类型;
4.TS支持隐式接口;
5.接口支持多继承;
6.可以使用符号"<接口类型>{}"来隐式声明匿名对象实现接口;