TypeScript接口
接口是我们应用程序中充当“合同”的结构。它定义了类遵循的语法,这意味着实现接口的类必须实现所有成员。我们不能实例化接口,但可以由实现它的类对象引用。TypeScript编译器使用接口进行类型检查(也被称为“鸭子类型”或“结构子类型”),以确定对象是否具有特定的结构。
接口仅包含方法和字段的声明,而不包括实现。我们不能使用它来构建任何东西。它由一个类继承,并且实现接口的类定义了接口的所有成员。
当Typescript编译器将其编译成JavaScript时,接口将从JavaScript文件中消失。因此,它的目的仅在于帮助开发阶段。
接口声明
我们可以声明如下的接口。
interface interface_name {
// 变量的声明
// 方法的声明
}
接口是用于声明TypeScript接口的关键字。
interface_name是接口的名称。
接口体包含变量和方法声明。
示例
interface OS {
name: String;
language: String;
}
let OperatingSystem = (type: OS): void => {
console.log('Android ' + type.name + ' has ' + type.language + ' language.');
};
let Oreo = {name: 'O', language: 'Java'}
OperatingSystem(Oreo);
在上面的示例中,我们创建了一个带有字符串类型的名称和语言属性的接口OS。 接下来,我们定义了一个函数,它具有一个参数,即接口OS的类型。
现在,将TS文件编译为JS,其输出如下所示。
let OperatingSystem = (type) => {
console.log('Android ' + type.name + ' has ' + type.language + ' language.');
};
let Oreo = { name: 'O', language: 'Java' };
OperatingSystem(Oreo);
输出:
接口的用途
我们可以使用接口进行以下操作:
- 验证属性的特定结构
- 作为参数传递的对象
- 从函数返回的对象。
接口继承
我们可以从其他接口继承接口。换句话说,Typescript允许接口从零个或多个基类型继承。
基类型可以是类或接口。 我们可以使用“extends”关键字在接口之间实现继承。
下面的示例可以更清楚地理解接口继承。
语法
child_interface extends parent interface{
}
示例
interface Person {
name:string
age:number
}
interface Employee extends Person {
gender:string
empCode:number
}
let empObject = {};
empObject.name = "Abhishek"
empObject.age = 25
empObject.gender = "Male"
empObject.empCode = 43
console.log("Name: "+empObject.name);
console.log("Employee Code: "+empObject.empCode);
输出:
让我们以上面的示例为例,这有助于我们更好地理解多个接口继承。
示例
interface Person {
name:string
}
interface PersonDetail {
age:number
gender:string
}
interface Employee extends Person, PersonDetail {
empCode:number
}
let empObject = {};
empObject.name = "Abhishek"
empObject.age = 25
empObject.gender = "Male"
empObject.empCode = 43
console.log("Name: "+empObject.name);
console.log("Employee Code: "+empObject.empCode);
输出:
数组类型接口
我们也可以使用接口来描述数组类型。以下示例帮助我们了解数组类型接口。
例子
// Array which return string
interface nameArray {
[index:number]:string
}
// use of the interface
let myNames: nameArray;
myNames = ['Virat', 'Rohit', 'Sachin'];
// Array which return number
interface ageArray {
[index:number]:number
}
var myAges: ageArray;
myAges =[10, 18, 25];
console.log("My age is: " +myAges[1]);
在上面的例子中,我们声明了返回string类型的nameArray和返回number类型的ageArray。数组中的索引类型始终为number,因此我们可以使用其在数组中的索引位置检索数组元素。
输出:
类中的接口
TypeScript还允许我们在类中使用接口。类通过使用implements关键字实现接口。我们可以通过以下示例来了解它。
示例
// 为类定义接口
interface Person {
firstName: string;
lastName: string;
age: number;
FullName();
GetAge();
}
// 实现接口
class Employee implements Person {
firstName: string;
lastName: string;
age:number;
FullName() {
return this.firstName + ' ' + this.lastName;
}
GetAge() {
return this.age;
}
constructor(firstN: string, lastN: string, getAge: number) {
this.firstName = firstN;
this.lastName = lastN;
this.age = getAge;
}
}
// 使用实现接口的类
let myEmployee = new Employee('Abhishek', 'Mishra', 25);
let fullName = myEmployee.FullName();
let Age = myEmployee.GetAge();
console.log("Name of Person: " +fullName + '\nAge: ' + Age);
在上面的例子中,我们声明了Person接口,并将firstName、lastName作为属性,FullName和GetAge作为方法/函数。这个Employee类使用implements关键字实现了这个接口。在实现一个接口之后,我们必须在类中声明这些属性和方法。如果我们没有实现这些属性和方法,它就会在编译时抛出错误。我们还在类中声明了构造函数。因此,当我们实例化类时,需要传递必要的参数,否则它会在编译时抛出错误。
输出:
接口和继承之间的区别
序号 | 接口 | 继承 |
---|---|---|
1. | 接口是应用程序中充当合同的结构。它定义所需的函数,而类负责实现它以满足该合同。 | 继承是面向对象编程,允许类似的对象从彼此继承功能和数据。 |
2. | 在接口中,我们只能声明属性和方法。 | 在继承中,我们可以使用超类声明和定义变量和方法。 |
3. | 接口类型的对象不能声明任何新方法或变量。 | 在这种情况下,我们可以声明和定义一个子类自己的变量和方法,该子类继承自超类。 |
4. | 接口强制要求存在于对象中的变量和方法。 | 子类扩展超类的能力以适应“ 定制”需求。 |
5. | 接口是包含无主题结构(抽象或虚拟函数)的类。因此,我们必须派生接口,然后在子类中实现所有函数。 | 继承是一个过程,在这个过程中,一个子类获得了它的超类的属性。 |