在Typescript,该接口是作为约束
函数。当编译成Javascript时,所有接口都将被
删除,因为Javascript中没有接口的概念。
让我们看一个简单的例子。
功能打印标签(labelledobj:{标签:字符串}){
console.log(labelledobj。标签);
}
尺寸:10 = { var myobj时,标签:10号
目标};
打印标签(myobj时);
所以,在这种
方法中,对labelledobj
类型:字符串} {标签,看起来可能有点复杂,但是我们看一看下面的声明,这是myobj时声明有大小
属性(= 10)和标签(属性值为10号目标),所以方法的
参数labelledobj类型{ }标签:字符串,指示参数有一个字符串类型的标签属性。
但是,这种方式看起来有点混乱,然后你可以使用接口(接口)来定义这个方法的参数类型。
接口labelledvalue {
标签:字符串;
}
功能打印标签(labelledobj:labelledvalue){
console.log(labelledobj。标签);
}
尺寸:10 = { var myobj时,标签:10号目标};
打印标签(myobj时);
可选属性
有时,我们不需要属性存在,我们可以使用可选属性的特性来定义它。
接口squareconfig {
颜色:字符串;
宽度:数字;
}
功能createsquare(
配置:squareconfig):{颜色:字符串;面积:{数量}
无功newsquare = {颜色:白
如果(配置)颜色{
newsquare.color = config.color;
}
如果(配置宽度){
newsquare.area = config.width * config.width;
}
返回newsquare;
}
无功mysquare = createsquare({颜色:黑});
然后我们通过在对象实现一个接口的方法squareconfig createsquare。
既然它是绝对可有可无的,为什么我们要定义它呢对比度是完全未定义的,可选属性的定义有两个优点。1、如果有属性,它可以限制类型。这是非常关键的。2,我们可以得到语法
智能提示。如果我们写在方法体中彩色的颜色,然后编译是不允许的。
方法类型
在Javascript中,方法函数是一种基本类型,在面向对象的思想中,接口的实现是由类来完成的,并且函数是一种类型,有可能实现接口吗答案是肯定的。
在Typescript,我们可以使用一个接口,限制了该方法的签名。
接口searchfunc {
(来源:字符串,字符串:字符串):布尔;
}
祈祷:searchfunc VaR;
祈祷=功能(来源:字符串,字符串:字符串){
VaR结果= source.search(串);
如果(结果= - 1){
返回false;
}
{其他
返回true;
}
}
在上面的代码中,我们定义了一个接口,该接口约束一个方法的签名,该方法有两个字符串参数,并返回一个布尔值。
需要注意的是,编译器只
检查类型是否
正确(参数的类型、返回值的类型),因此参数的名称可以更改为其他参数。
祈祷:searchfunc VaR;
祈祷=功能(SRC:字符串、子:字符串){
var result = src.search(子);
如果(结果= - 1){
返回false;
}
{其他
返回true;
}
}
这也可以编译和传递。
数组类型
我们已经定义了接口中的方法类型,那么如何定义数组类型呢这是简单u3002
接口stringarray {
{索引:数字}:字符串;
}
VaR MyArray:StringArray;
MyArray = {Bob
Then myArray is an array, and the indexer is the number type, and the element is string.
在接口的定义,该索引的名称一般是指数(当然这是可以改变的东西,但一般的
名字是指数),所以改为
接口stringarray {
{数量}:myindex:字符串;
}
VaR MyArray:StringArray;
MyArray = {Bob
也可以。
需要注意的是,索引的类型只能是数字或字符串重要。
接口数组{
{索引:数字}:任何;
}
界面词典{
{索引:字符串}:任何;
}
以上两段可以编译通过。
最后,需要注意的另一点是,如果接口已经是数组类型,那么接口中定义的其他属性的类型必须是数组的元素类型:
界面词典{
{索引:字符串}:字符串;
长度:号码类型; / /
错误,'length'is不是索引的一个亚型
}
然后它不会被编译和传递,必须将长度更改为字符串类型。
使用类来实现接口
一般来说,我们习惯于使用类来实现所需的接口,而不是直接使用接口。
接口clockinterface {
CurrentTime:
日期;
}
时钟类实现了clockinterface {
CurrentTime:日期;
构造函数(h:m,m:数字){ }
}
In Typescript, the class keyword is declared, which is the same as Ecmascript 6.
此外,我们还可以使用接口来约束类中定义的方法。
接口clockinterface {
CurrentTime:日期;
时间(D:日期);
}
时钟类实现了clockinterface {
CurrentTime:日期;
时间(D期){
this.currenttime = D;
}
构造函数(h:m,m:数字){ }
}
在Typescript,我们可以定义为接口的构造函数。
接口clockinterface {
新(小时:号码,分钟:号码);
}
我们可能追随的下一个天真:
接口clockinterface {
新(小时:号码,分钟:号码);
}
时钟类实现了clockinterface {
CurrentTime:日期;
构造函数(h:m,m:数字){ }
}
这不好!!!因为构造函数是静态的(静态),所以这个类只能实现接口的实例(实例)部分。
这个接口中定义的构造函数是无用的吗由于Typescript提供了这个功能,它肯定不会是无用的。声明的方法更特别:
接口clockstatic {
新(小时:号码,分钟:号码);
}
时钟类{
CurrentTime:日期;
构造函数(h:m,m:数字){ }
}
VaR CS:clockstatic =时钟;
var =新的CS(7, 30)新的钟表;
通常我们写新的时钟,在这里我们点的时钟类的clockstatic接口。需要注意的是,新的钟表的变量的类型是重要的。
继承接口
与类一样,接口也可以继承,使用
扩展关键字。
界面形状{
颜色:字符串;
}
接口正方形扩展形状{
边长:数;
}
var平方};
square.color =蓝色;
square.sidelength = 10;
当然,您可以继承多个接口。
界面形状{
颜色:字符串;
}
接口penstroke {
PenWidth:号;
}
接口方延伸的形状,PenStroke {
边长:数;
}
var平方};
square.color =蓝色;
square.sidelength = 10;
square.penwidth = 5;
需要注意的是,虽然
支持多个接口是继承的,但是如果继承接口中定义的同名属性的类型不同,则不能编译。
界面形状{
颜色:字符串;
测试:编号;
}
接口penstroke {
PenWidth:号;
测试:字符串;
}
接口方延伸的形状,PenStroke {
边长:数;
}
无法编译和传递代码,因为不确定测试属性的类型。
同时使用上面描述的类型
如果只有一个类型可以使用,那么界面太弱了。幸运的是,我们有一个强大的接口。
界面反{
(开始:数字):字符串;
区间数;
重置():无效;
}
var计数器;
C(10);
C.reset();
c.interval = 5;
这用于三种类型,即方法(接口本身是一种方法)、属性、方法(定义方法成员)。
以上是本文的全部内容,希望大家能喜欢。