说明
从效果上看,type和interface的效果差不多,都能够实现对变量的约束。但是二者在定义和使用上还是存在一些区别的。
使用
首先来从定义的角度来看:
// 定义typetype User = {user: string;}const obj: User = {user: 'root'}// 定义接口interface UserInterface {user: string;}const obj2: UserInterface = {user: 'admin'}
二者一个是通过type关键字一个是通过interface关键字来进行声明。
如果在定义的过程中出现重名的问题,type不允许重名,而interface允许重名。
出现重名的Type 发生异常。

如果接口出现重名,则会进行规则的合并。
如果想要合并规则,接口除了接口名相同以外,还可以通过继承的写法来实现。

而type想要实现合并,需要使用到&。
如果在组合type中使用|,则是实现任意一个约束即可。
在实际的开发过程中,type和接口是可以混用的。
比如:
type User = {name: string;}interface UserInterface {age: number;}class Person implements User, UserInterface {public name: string;public age: number;constructor(name: string, age: number) {this.name = name;this.age = age;}}
上面代码中类Person同时使用User和UserInterface进行约束。
也可以使用&来将type和interface进行混用。
type User = {name: string;}interface UserInterface {age: number;}type Person = User & UserInterface;const obj: Person = {name: 'John',age: 30}
注意
总结
type和interface 二者有很多相似的地方,也有一些区别。具体在开发中到底应该用哪个,主要还是看公司的开发规范和具体的应用场景。
