TypeScript中的接口介绍
来自菜鸟教程
TypeScript 允许我们为它们定义细粒度的类型检查,从而帮助我们与我们的 vales 保持契约。 接口是 TypeScript 中实现这一目标的主要机制。
例如,假设我们有以下代码,其中定义了两个用户:
const user1 = {
id: 1,
firstName: 'John',
lastName: 'Doe',
proUser: false,
email: 'john.doe@foobar.com'
}
const user2 = {
firstName: 'Jane',
lastName: 'Doe',
proUser: true,
email: 'jane.doe@foobar.com'
}
让我们建立一个契约,以便我们的用户对象遵守指定的类型定义:
interface User {
id: number;
firstName: string;
lastName: string;
proUser: boolean;
email: string;
}
const user1: User = {
id: 1,
firstName: 'John',
lastName: 'Doe',
proUser: false,
email: 'john.doe@foobar.com'
}
const user2: User = {
id: 2,
firstName: 'Jane',
lastName: 'Doe',
proUser: true,
email: 'jane.doe@foobar.com'
}
现在,如果我们尝试定义缺少属性、附加属性或类型错误的属性的 User 对象,TypeScript 编译器会抱怨并准确告诉我们用户定义有什么问题。
您可以使用 Elvis 运算符 (?) 在接口中定义可选属性:
interface User {
id: number;
firstName: string;
lastName: string;
proUser: boolean;
email: string;
avatar?: string;
}
const user1: User = {
id: 1,
firstName: 'John',
lastName: 'Doe',
proUser: false,
email: 'john.doe@foobar.com'
}
const user2: User = {
id: 2,
firstName: 'Jane',
lastName: 'Doe',
proUser: true,
email: 'jane.doe@foobar.com',
avatar: 'https://something/my-face.jpg'
}
请注意,我们不必为 user1 指定任何头像值,TypeScript 不会抱怨。
您的接口可以在自己的文件中定义,然后使用 ES6 模块 语法导入:
import { User } from '../interfaces/user';
const user1: User = {
id: 1,
firstName: 'John',
lastName: 'Doe',
proUser: false,
email: 'john.doe@foobar.com'
}
// ...