面试题答案
一键面试语法区别
- type:使用
type
关键字定义类型别名,语法为type 类型别名 = 类型定义
。type UserType = { name: string; age: number; };
- interface:使用
interface
关键字定义接口,语法为interface 接口名 { 成员定义 }
。interface UserInterface { name: string; age: number; }
功能区别
- 合并声明:
- interface:支持合并声明,多个同名
interface
声明会自动合并成一个接口。
interface User { name: string; } interface User { age: number; } let user: User = { name: 'John', age: 30 };
- type:
type
类型别名不能重复定义,重复定义会报错。
- interface:支持合并声明,多个同名
- 类型运算:
- type:支持类型运算,如联合类型、交叉类型等。
type StringOrNumber = string | number; type CombineTypes = { name: string } & { age: number };
- interface:不支持直接进行类型运算,但可以通过其他方式间接实现类似功能,如使用
extends
关键字扩展接口。
- 实现继承:
- interface:接口可以通过
extends
关键字继承其他接口,实现接口的复用和扩展。
interface Animal { name: string; } interface Dog extends Animal { breed: string; }
- type:类型别名可以通过交叉类型来模拟继承,但语法上和接口继承有所不同。
type AnimalType = { name: string; }; type DogType = AnimalType & { breed: string; };
- interface:接口可以通过
- 可索引类型:
- interface:可以方便地定义可索引类型。
interface StringDictionary { [key: string]: string; } let dict: StringDictionary = { key1: 'value1' };
- type:也能定义可索引类型,但语法稍显不同。
type StringDictionaryType = { [key: string]: string; }; let dictType: StringDictionaryType = { key1: 'value1' };