📜  TypeScript接口(1)

📅  最后修改于: 2023-12-03 15:20:43.621000             🧑  作者: Mango

TypeScript接口

在 TypeScript 中,接口(Interface)是用于定义对象的类型的一种方式。它们提供了一种结构化的方式来定义对象的形状,包括属性、方法以及任何其他组成部分。使用接口可以提高代码的可读性和可维护性,以及进行类型检查和静态分析。

定义接口

接口可以使用 interface 关键字来定义。以下是一个接口的示例:

interface Person {
  name: string;
  age: number;
  sayHello(): void;
}

上面的代码定义了一个名为 Person 的接口,它包含了 nameage 两个属性,以及一个 sayHello 的方法。属性和方法既可以有类型声明,也可以有默认值。

使用接口

在 TypeScript 中,我们可以使用接口来定义对象的类型。接口可以用作函数参数、返回值、类的成员等等。以下是一些使用接口的示例:

对象
let person: Person = {
  name: 'John',
  age: 25,
  sayHello: () => {
    console.log('Hello!');
  }
};

上面的代码创建了一个 person 对象,该对象符合 Person 接口的定义。

函数参数
function greet(person: Person): void {
  console.log(`Hello, ${person.name}!`);
}

let john = {
  name: 'John',
  age: 25,
  sayHello: () => {
    console.log('Hello!');
  }
};

greet(john);

上面的代码中,函数 greet 接受一个 Person 类型的参数。

类的成员
class Employee implements Person {
  name: string;
  age: number;

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

  sayHello(): void {
    console.log('Hello!');
  }
}

上面的代码定义了一个 Employee 类,它实现了 Person 接口。

继承接口

接口可以相互继承,实现接口的类或对象需要实现继承的所有接口的属性和方法。以下是一个接口继承的示例:

interface Employee extends Person {
  profession: string;
}

let john: Employee = {
  name: 'John',
  age: 25,
  profession: 'Developer',
  sayHello: () => {
    console.log('Hello!');
  }
};

上面的代码定义了一个 Employee 接口,它继承了 Person 接口,并添加了一个 profession 属性。

可选属性

接口的属性可以加上 ? 符号,表示该属性是可选的。以下是一个使用可选属性的示例:

interface Person {
  name: string;
  age?: number;
  sayHello(): void;
}

上面的代码中,age 属性是可选的。

只读属性

接口的属性可以加上 readonly 关键字,表示该属性是只读的,不能被修改。以下是一个使用只读属性的示例:

interface Point {
  readonly x: number;
  readonly y: number;
}

let p: Point = { x: 10, y: 20 };
p.x = 5; // 错误,无法修改只读属性
总结

通过使用 TypeScript 中的接口,可以有效地定义对象的类型结构,并提供代码的类型检查和静态分析。接口还可以相互继承、添加可选属性和只读属性,以及应用于函数参数和类的成员等场景。接口是 TypeScript 中非常重要和实用的特性之一。