TypeScript接口

2023-05-22 10:15:25 浏览数 (1)

在 TypeScript 中,接口(Interface)是一种用于定义对象的结构和类型的语法约定。接口提供了一种方式来描述对象的属性、方法和行为,并且可以在多个类之间共享和重用。

定义接口

在 TypeScript 中,可以使用 interface 关键字来定义接口。

代码语言:javascript复制
interface Person {
  name: string;
  age: number;
  greet(): void;
}

在上面的例子中,我们定义了一个名为 Person 的接口,它包含了 nameage 两个属性,以及一个 greet() 方法。

实现接口

要使类实现一个接口,可以使用 implements 关键字。

代码语言:javascript复制
class Student implements Person {
  name: string;
  age: number;

  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }

  greet(): void {
    console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
  }
}

在上面的例子中,Student 类实现了 Person 接口,并提供了对应的属性和方法的实现。

类型检查与接口

当一个类实现了一个接口时,TypeScript 会进行类型检查,确保该类包含了接口中定义的所有属性和方法。

代码语言:javascript复制
function greetPerson(person: Person): void {
  person.greet();
}

const student = new Student("Alice", 20);
greetPerson(student); // 调用函数,传递实现了 Person 接口的对象

在上面的例子中,我们定义了一个 greetPerson 函数,该函数接受一个实现了 Person 接口的对象作为参数,并调用其中的 greet() 方法。通过将 student 对象传递给 greetPerson 函数,我们可以确保该对象满足 Person 接口的要求。

可选属性和只读属性

接口中的属性可以是可选的,即可以存在也可以不存在。

代码语言:javascript复制
interface Person {
  name: string;
  age?: number;
}

在上面的例子中,age 属性是可选的,可以存在也可以不存在。

接口中的属性还可以是只读的,即不可修改。

代码语言:javascript复制
interface Person {
  readonly name: string;
  age: number;
}

在上面的例子中,name 属性是只读的,一旦赋值后就不可修改。

继承接口

接口还可以通过继承其他接口来扩展其属性和方法。

代码语言:javascript复制
interface Teacher extends Person {
  subject: string;
}

在上面的例子中,Teacher 接口继承了 Person 接口,并添加了一个 subject 属性。

函数类型接口

接口不仅可以用于描述对象的结构,还可以用于描述函数的类型。

代码语言:javascript复制
interface AddFunc {
  (a: number, b: number): number;
}

在上面的例子中,AddFunc 是一个函数类型的接口,它描述了接受两个参数并返回一个数字的函数类型。

0 人点赞