相同点
都可以描述一个对象或者函数
interface
1 2 3 4 5 6 7 8
| interface User { name: string; age: number; }
interface setUser { (name: string, age: number): void; }
|
type
1 2 3 4 5 6
| type User = { name: string; age: number; };
type setUser = (name: string, age: number) => void;
|
语法上 type 用等于号,interface 直接跟 class 一样使用。
都允许扩展
interface 和 type 都可以拓展,并且不是互相独立的,也就是说 interface 可以 extends type,type 也可以 extends interface。虽然效果差不多,但是两者语法不同。
interface extends interface
1 2 3 4 5 6
| interface Name { name: string; } interface User extends Name { age: number; }
|
type extends type
1 2 3 4 5 6
| type Name = { name: string; }; type User = Name & { age: number; };
|
interface extends type
1 2 3 4 5 6
| type Name = { name: string; }; interface User extends Name { age: number; }
|
type extends interface
1 2 3 4
| interface Name { name: string; } type User = Name & { age: number };
|
扩展的语法也不一样,type 使用&进行扩展,interface 使用 extends 进行扩展
不同点
type 可以而 interface 不行
type 可以声明基本类型别名,联合类型,交叉类型,元组等类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| type Name = string;
interface Dog { wang(); }
interface Cat { miao(); }
type Pet = Dog | Cat;
type Nothing = Dog & Cat;
type PetList = [Dog, Cat];
|
interface 可以而 type 不行
interface 能够声明合并
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| interface User { name: string; age: number; }
interface User { sex: string; }
|