定义类型范围
interface只能定义对象类型,而type声明可以声明任何类型,包括基础类型、联合类型、元组类型、交叉类型。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| type person = string
interface Dog { name: string; } interface Cat { age: number; }
type animal = Dog | Cat
type animal = [Dog, Cat]
|
扩展性
- 接口可以
extends、implements扩展多个接口或类。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| interface Person { name: string } interface User extends Person { age: number }
type Person = { name: string } interface User extends Person { age: number }
|
1 2 3 4 5 6 7 8 9 10 11
| type Person = { name: string } type User = Person & { age: number }
interface Person { name: string } type User = {age: number} & Person
|
合并声明
定义两个相同名称的接口会合并声明;而定义两个同名的type会出现异常。
1 2 3 4 5 6 7 8 9 10 11
| interface Person { name: string } interface Person { age: number }
|
映射类型
type 能使用 in 关键字生成映射类型,但 interface 不行。
1 2 3 4 5 6 7 8 9 10
| type Keys = 'firstname' | 'surname';
type DudeType = { [key in Keys]: string; };
const test: DudeType = { firstname: 'Pawel', surname: 'Grzybek', };
|
typeof
type可以使用typeof获取实例类型
1 2
| let div = document.createElement('div'); type B = typeof div
|
默认导出方式
inerface 支持同时声明 和 默认导出;而type必须先声明后导出
1 2 3
| export default interface Config { name: string; }
|
1 2
| type Config2 = {name: string} export default Config2
|