type和interface有什么区别
相同
实际上如果只用于标明类型
的话,type
基本可以实现interface
的所有功能
继承(泛化)
interface
typescript
interface a { name: string; }
interface b extends a { sex: string; }
type
typescript
type a = { name: string; }
type b = a & { sex: string; }
标明函数类型以及函数重载
interface
typescript
interface a {
(): void; // 普通调用
(a: string): void; // 重载
new(): Date; // 构造函数
}
type
typescript
type a = {
(): void; //普通调用
(a: string): void; //重载
new(): Date; // 构造函数
}
// 或者这样写构造函数
type a = new () => Date;
最大的不同
但是interface
强大的地方就在于,它可以扩展全局对象
,当然这也与interface
的合并特性
有关。也是和type
的主要区别。
举个例子
给全局Date
对象加个format
typescript
interface Date {
format(template: string): string
}
当然如果你想给Date
构造函数添加一个format
typescript
interface DateConstructor {
format(template: string): string
}
当然
interface
作为接口的话,那还有一个特性就是implements
之后,必须被实现
。这也是和type
的一个区别。