TypeScript 语言 接口 interface 的基础语法

TypeScriptamuwap 发布于 3 天前 2 次阅读


TypeScript【1】 接口【2】(Interface)基础语法详解

TypeScript 是一种由微软开发的自由和开源的编程语言,它是 JavaScript 的一个超集,添加了静态类型检查【3】和基于类的面向对象编程【4】特性。在 TypeScript 中,接口(Interface)是一种定义对象形状的方式,它描述了一个对象应该具有哪些属性和方法。接口是 TypeScript 中非常重要的一个概念,它可以帮助开发者更好地组织代码,提高代码的可维护性和可读性。

本文将围绕 TypeScript 接口的基础语法展开,详细介绍接口的定义、使用以及一些高级特性。

接口的基本语法

在 TypeScript 中,接口通过 `interface` 关键字来定义。下面是一个简单的接口定义示例:

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

在这个例子中,我们定义了一个名为 `Person` 的接口,它包含两个属性:`name` 和 `age`。这两个属性分别具有 `string` 和 `number` 类型。

接口的使用

定义了接口之后,我们就可以在 TypeScript 代码中使用它了。以下是如何使用 `Person` 接口的示例:

typescript
let tom: Person = {
name: 'Tom',
age: 25
};

console.log(tom.name); // 输出: Tom
console.log(tom.age); // 输出: 25

在这个例子中,我们创建了一个名为 `tom` 的变量,它的类型被指定为 `Person`。然后我们给 `tom` 赋值,这个值必须符合 `Person` 接口定义的属性。

可选属性【5】

有时候,我们可能希望接口中的某些属性是可选的,即在使用对象时,这些属性可以省略。在 TypeScript 中,可以通过在属性名后面加上 `?` 来表示该属性是可选的:

typescript
interface Person {
name: string;
age: number;
gender?: string; // gender 属性是可选的
}

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

console.log(person.name); // 输出: Alice
console.log(person.age); // 输出: 30
// console.log(person.gender); // 输出: undefined

在上面的例子中,`gender` 属性是可选的,因此在使用 `person` 对象时,我们可以省略 `gender` 属性。

只读属性【6】

在 TypeScript 中,我们还可以定义只读属性,这意味着这些属性的值在对象创建后不能被修改。只读属性通过在属性名前面加上 `readonly` 关键字来定义:

typescript
interface Person {
readonly id: number;
name: string;
age: number;
}

let person: Person = {
id: 1,
name: 'Bob',
age: 28
};

// person.id = 2; // Error: Cannot assign to 'id' because it is a read-only property.

在上面的例子中,`id` 属性被定义为只读,因此尝试修改 `id` 的值会导致编译错误。

函数类型【7】

接口不仅可以定义对象的属性,还可以定义函数类型。以下是一个包含函数类型的接口示例:

typescript
interface SearchFunc {
(source: string, subString: string): boolean;
}

let mySearch: SearchFunc;
mySearch = function (source: string, subString: string) {
let index = source.indexOf(subString);
return index > -1;
};

在这个例子中,`SearchFunc` 接口定义了一个函数类型,它接受两个参数:`source` 和 `subString`,并返回一个布尔值。然后我们创建了一个名为 `mySearch` 的变量,它的类型被指定为 `SearchFunc`,并定义了一个符合该接口的函数。

索引签名【8】

索引签名是 TypeScript 接口的一个高级特性,它允许我们定义一个索引类型,用于访问对象中不存在的属性。以下是一个使用索引签名的示例:

typescript
interface StringArray {
[index: number]: string;
}

let myArray: StringArray = ['Bob', 'Tom', 'Alice'];

console.log(myArray[0]); // 输出: Bob

在这个例子中,`StringArray` 接口定义了一个索引签名,它表示对象可以通过数字索引来访问,并且这些索引对应的值都是字符串类型。

扩展接口【9】

TypeScript 允许我们通过扩展接口来增加新的属性或方法。以下是一个扩展接口的示例:

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

interface PersonWithPhone {
readonly phone: string;
}

interface ExtendedPerson extends Person, PersonWithPhone {
email: string;
}

let person: ExtendedPerson = {
name: 'John',
age: 30,
phone: '123-456-7890',
email: 'john@example.com'
};

在这个例子中,我们定义了两个接口 `Person` 和 `PersonWithPhone`,然后通过 `extends` 关键字扩展了 `Person` 接口,使其包含 `PersonWithPhone` 接口的所有属性。我们定义了一个 `ExtendedPerson` 接口,它继承了 `Person` 和 `PersonWithPhone` 接口的所有属性。

总结

接口是 TypeScript 中一个强大的特性,它可以帮助我们定义对象的形状,提高代码的可维护性和可读性。本文介绍了 TypeScript 接口的基本语法、使用方法以及一些高级特性,包括可选属性、只读属性、函数类型、索引签名和接口扩展。通过学习这些知识,开发者可以更好地利用 TypeScript 接口来编写高质量的代码。