TypeScript中的接口与类型

TypeScript中的这些语句(接口类型)之间有什么区别

接口X{
a:号码
b:字符串
}
X型={
a:号码
b:字符串
};

2019年更新


目前的答案和官方文件已经过时。对于那些刚接触TypeScript的人来说,如果没有例子,所使用的术语就不清楚了。以下是最新的差异列表

一,。对象/功能

两者都可用于描述对象的形状或函数签名。但语法不同

接口

接口点{
x:数字;
y:数字;
}
接口设定点{
(x:编号,y:编号):无效;
}

类型别名

类型点={
x:数字;
y:数字;
};
类型设定点=(x:编号,y:编号)=>无效的

二,。其他类型

与接口不同,类型别名还可用于其他类型,如原语、联合和元组

//原语
类型名称=字符串;
//反对
键入PartialPointX={x:number;};
类型PartialPointY={y:number;};
//联合
类型PartialPoint=PartialPointX | PartialPointY;
//元组
类型数据=[数字,字符串];

三,。延伸

两者都可以扩展,但语法也不同。此外,请注意,接口和类型别名不是互斥的。接口可以扩展类型别名,反之亦然

接口扩展接口

接口部分点{x:number;}
接口点扩展部分点{y:number;}

类型别名扩展了类型别名

键入PartialPointX={x:number;};
类型点=部分点x&{y:number;};

接口扩展了类型别名

键入PartialPointX={x:number;};
接口点扩展部分点{y:number;}

类型别名扩展接口

接口部分点{x:number;}
类型点=部分点x&{y:number;};

四,。工具

类可以以完全相同的方式实现接口或类型别名。但是请注意,类和接口被视为静态蓝图。因此,它们无法实现/扩展命名联合类型的类型别名

接口点{
x:数字;
y:数字;
}
类SomePoint实现点{
x=1;
y=2;
}
类型点2={
x:数字;
y:数字;
};
类SomePoint2实现了Point2{
x=1;
y=2;
}
键入PartialPoint={x:number;}{y:number;};
//FIXME:无法实现联合类型
类SomePartialPoint实现PartialPoint{
x=1;
y=2;
}

五,。声明合并

与类型别名不同,接口可以多次定义,并将被视为单个接口(合并所有声明的成员)

//这两个声明变成:
//接口点{x:number;y:number;}
接口点{x:number;}
接口点{y:number;}
常数点:点={x:1,y:2};

发表评论