TypeScript中的类型与接口
作者:互联网
接口
接口指定每个实体必须遵循的语法。
接口定义了接口的成员,即其属性、方法和事件。
只有成员的声明包含在接口中。派生类负责定义成员。
TypeScript编译器使用接口进行类型检查,它经常有助于建立派生类所遵循的标准结构。我们使用interface
关键字来创建接口。
接口人{ 名称:字符串; 年龄:数字; } const john:人 = { 姓名:“约翰”, 年龄:26岁 }
类型和类型别名
在TypeScript中,数据类型由其类型定义。有许多基本类型,包括字符串、布尔值和数字。
此外,TypeScript具有高级类型,其中包括一个称为astype别名的功能。
类型别名允许我们更改类型的名称,而无需真正定义新类型。因此,我们使用type
关键字来制作一个新的类型别名。
类型 Person = { 名称:字符串; 年龄:数字; } const john:人 = { 姓名:“约翰”, 年龄:26岁 }
类型和接口之间的差异
虽然两种类型和界面在表面外观上看起来相似,但它们之间有很多差异。
例如,接口本质上是描述数据形状的一种手段,就像对象一样。
另一方面,类型是数据类型的定义,如原始、交集、联合、元组或不同类型。在本节中,我们将讨论TypeScript中接口和类型之间的一些关键区别。
声明合并
当声明两个具有相同名称的接口时,它可以合并这两个接口。
接口人{ 名称:字符串 } 接口人{ 年龄:数字 } const john:人 = { 姓名:“约翰”, 年龄:26岁 }
如果使用类型关键字声明具有相同变量名的两种不同类型,TypeScript编译器将生成错误。
类型 Person = { 名称:字符串 } // 这给出了重复标识符“人”错误 类型 Person = { 年龄:数字 }
延伸和交叉
接口可以用类型或类型别名扩展。TypeScript接口的最佳特征之一是它在扩展类时的简单性。
接口 PersonNameInterface { name: string } 接口 Person1 扩展 PersonNameInterface { age: number } 类型 PersonNameType = { name: string } 接口 Person2 扩展 PersonNameType { age: number } class PersonClass { name = "Jhon" } 接口 Person3 扩展 PersonClass { 年龄:数字 }
由于类型或类型别名无法扩展,并且不支持此功能,因此类型无法扩展类。
然而,我们可以将多种类型组合成一种类型,形成交集类型。我们还可以组合两个接口,通过使用&
关键字创建一个新的交集类型。
但值得记住的是,结合两个接口不能创建接口的交集。
类型 PersonNameType = { name: string; } type Person1 = PersonNameType & { age: number; } 接口 PersonNameInterface { name: string; } 类型 Person2 = PersonNameInterface & { age: number; } // 我们可以组合两个接口来创建交集类型,但不能创建交集接口 接口 PersonNameInterface { name: string; } 界面 PersonAgeInterface { age: number; } 类型 Person3 = PersonNameInterface & PersonAgeInterface
实施和联盟
类可以以相同的方式实现接口或类型别名。但请记住,类和接口是静态蓝图。
因此,他们无法实现或扩展引用联合类型的类型别名。
接口 PersonInterface { 名称:字符串; 年龄:数字; } 类John实现了PersonInterface { 名字 = "约翰"; 年龄 = 26; } 类型 PersonType = { 名称:字符串; 年龄:数字; }; 类Ann实现PersonType { 姓名 = "Ann"; 年龄 = 26; } type UnionType = { name: string; } | { age: number; }; // 给出一个错误 类Joel实现了UnionType { 姓名 = "Joel"; 年龄= 2; }
TypeScript的类型不支持实现。我们无法使用可用于定义变量的实现来创建类型别名。但我们可以创建联盟类型。
通过组合两个接口或类型,我们可以创建一个新的联合类型,该类型可以使用|
关键字包含一个或多个类型。
类型 PersonNameType = { 名称:字符串 }; 类型 PersoneAgeType = { 年龄:数字 }; 类型 Person1 = PersonNameType | PersoneAgeType; 接口 PersonNameInterface { 名称:字符串 }; 接口 PersoneAgeInterface { 年龄:数字 }; 类型 Person2 = PersonNameInterface | PersoneAgeInterface;
其他类型
与接口不同,类型别名可用于其他类型,如原语、联合体和元组。
// 原始 类型名称=字符串; // 对象 类型 PersonName = { name: string; }; 类型 PersonAge = { y: number; }; // 工会 类型 PartialPoint = PersonName | PersonAge; // 元组 类型 数据 = [数字,字符串];
在TypeScript中,我们只能使用类型来指定上述“其他类型”,而不是接口。
然而,我们仍然可以在界面中使用那些,如以下示例所示:
接口人{ 名称:字符串 obj:{} 联合:字符串 | 数字 元组:[字符串,数字] }
标签:TypeScript,接口, 来源: