TypeScript 基础指南:接口(Interface)

在 TypeScript 中,接口(Interface)是一种自定义类型的方式。它允许开发者定义对象的形状,描述该对象应该具有的属性和方法。 接口的基本语法如下:

interface InterfaceName {
  property1: type;
  property2: type;
  // ...
  methodName(parameter: type): returnType;
}

其中:

InterfaceName 是接口的名称
property1, property2 等是接口定义的属性
methodName 是接口定义的方法

下面是一个简单的接口示例:

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

let john: Person = {
  name: 'John Doe',
  age: 30,
  sayHello() {
    console.log(`Hello, my name is ${this.name}`);
  }
};

john.sayHello(); // 输出: "Hello, my name is John Doe"

在这个例子中,我们定义了一个 Person 接口,它包含 name、age 属性和 sayHello 方法。然后我们创建了一个实现了 Person 接口的对象 john。 接口可以用于描述各种类型的对象:

对象字面量:
interface Point {
  x: number;
  y: number;
}

let point: Point = { x: 1, y: 2 };
函数:
interface Greeter {
  (name: string): string;
}

let greet: Greeter = function(name) {
  return `Hello, ${name}!`;
};
数组:
interface StringArray {
  [index: number]: string;
}

let myArray: StringArray = ['hello', 'world'];
类:
interface Animal {
  name: string;
  makeSound(): void;
}

class Dog implements Animal {
  name: string;
  makeSound() {
    console.log('Woof!');
  }
}
构造函数:
// 定义构造函数接口
interface PersonConstructor {
  new(name: string, age: number): Person;
}

// 定义 Person 类
class Person {
  name: string;
  age: number;

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

  introduce() {
    console.log(`Hi, my name is ${this.name} and I'm ${this.age} years old.`);
  }
}

// 使用构造函数接口创建 Person 类的实例
function createPerson(ctor: PersonConstructor, name: string, age: number): Person {
  return new ctor(name, age);
}

let john = createPerson(Person, 'John', 30);
john.introduce(); // 输出: "Hi, my name is John and I'm 30 years old."

接口是 TypeScript 中非常强大的一个特性。它可以帮助开发者定义和描述数据的结构,提高代码的可读性和可维护性。同时,TypeScript 的类型系统会确保代码遵循接口的定义,从而增强代码的可靠性。