定义:
interface Users {name: string;age: number;getName: () => string;
}
type UsersType = {name: string;age: number;getName: () => string;
}
使用:
const user: Users = {name: '张三',age: 18,getName() {return this.name}
}class Person implements Users {name: string;age: number;constructor(name: string, age: number) {this.name = name;this.age = age;}getName() {return this.name}
}
class Person2 implements UsersType {name: string;age: number;constructor(name: string, age: number) {this.name = name;this.age = age;}getName() {return this.name}
}
相同点
- 都可以描述一个对象结构
- 都可以被class实现
- 都可以被扩展
// type 基础类型,interface不行
type name = string
type list = Array<number>
// type 联合类型 交叉类型, interface不行,但是可以参与
type info = string | number // 联合类型type T1 = { name: string }
type T2 = { age: number }
type T3 = T1 | T2 // 联合类型
const a:T3 = { name: '张三' }
// interface可以参与联合和交叉类型
interface T4 {tall: number
}
type T5 = T1 | T4
type T6 = T1 & T4 // 交叉类型
const b:T5 = { name: '张三'}
const c:T6 = { name: '张三', tall: 180}type T7 = typeof a // 获取a的类型 T3// keyof
type K1 = keyof T3 // 'name' | 'age'
不同点
- type可以声明基础类型
- type可以使用联合类型和交叉类型
- type可以使用typeof赋值
- 初衷:type定义类型关系,interface定义数据结构
- 但实际时,很多时候会模糊不清,没有明确的界限
- 建议:优先使用interface,再使用type(简单明了)