TypeScript接口定义

在TypeScript中,接口是一种定义数据结构的方式。它类似于其他编程语言中的接口概念,用于定义对象的形状、结构和行为。本文将介绍TypeScript接口的基本概念以及如何使用接口来定义和使用自定义数据类型。

接口的基本语法

在TypeScript中,使用interface关键字来定义接口。接口可以包含属性、方法和索引签名,用于描述对象的结构和行为。以下是接口的基本语法:

interface 接口名称 {
  属性名称: 属性类型;
  方法名称(): 返回值类型;
}

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

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

上面的代码定义了一个名为Person的接口,它具有nameage属性,以及一个sayHello方法。接口中的属性和方法可以有不同的访问修饰符,如publicprivateprotected等。

使用接口定义对象

使用接口定义对象类型时,可以使用:符号将对象的类型标记为接口名称。以下是一个示例:

interface Person {
  name: string;
  age: number;
}

let person: Person = {
  name: 'John',
  age: 30
};

上面的代码定义了一个Person接口,并将一个对象赋值给person变量。注意,赋值给person的对象必须满足Person接口的结构要求,即具有nameage属性,且属性类型符合接口定义。

可选属性和只读属性

接口中的属性有时可能是可选的,即可以存在也可以不存在。可以通过在属性名称后面添加?来定义可选属性。以下是一个示例:

interface Person {
  name: string;
  age?: number;
}

let person: Person = {
  name: 'John'
};

上面的代码中,age属性被定义为可选的。因此,赋值给person的对象可以不包含age属性。

另外,接口中的属性也可以被定义为只读属性,即只能在对象创建时进行赋值,后续无法修改。可以通过在属性名称前面添加readonly关键字来定义只读属性。以下是一个示例:

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

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

上面的代码中,xy属性被定义为只读属性。因此,创建对象时可以对它们进行赋值,但后续无法修改。

接口的继承

接口可以通过继承其他接口来扩展自己的属性和方法。可以使用extends关键字实现接口的继承。以下是一个示例:

interface Shape {
  color: string;
}

interface Square extends Shape {
  sideLength: number;
}

let square: Square = {
  color: 'red',
  sideLength: 10
};

上面的代码中,Square接口继承了Shape接口的color属性。因此,square对象必须同时满足Shape接口和Square接口的要求。

使用接口定义函数类型

除了可以用于定义对象类型,接口也可以用于定义函数类型。使用接口定义函数类型时,需要指定函数的参数类型和返回值类型。以下是一个示例:

interface Calculate {
  (x: number, y: number): number;
}

let add: Calculate = function(x, y) {
  return x + y;
};

let subtract: Calculate = function(x, y) {
  return x - y;
};

上面的代码中,Calculate接口定义了一个函数类型,该函数接受两个参数xy,并返回一个数值类型。根据Calculate接口的定义,可以将具有相同参数和返回值类型的函数赋值给addsubtract变量。

总结

本文介绍了TypeScript中接口