本文介绍一道常见的面试题:typescript中 type 和 interface 的异同点,以及什么时候该使用它们。
相同的用法
定义object类型
interface User {
name: string
age: number
}
type User = {
name: string
age: number
}
定义function类型
interface Fn {
(name: string) => void
}
type Fn = (name: string) => void
继承(拓展)
// interface
interface Name {
name: string
}
interface User extends Name {
age: number
}
// type
type Name = {
name: string
}
type User = Name & {
age: number
}
interface 继承 type
type Name = {
name: string
}
interface User extends Name {
age: number
}
type 继承 interface
interface Name {
name: string
}
type User = Name & {
age: number
}
不同点
实现类型:
type 可以定义基本类型,元组, 联合类型。interface 不行
// 基本类型
type Name = string
// 联合类型
interface ZhangSan {
name: string
}
interface LiSi {
age: number
}
type People = ZhangSan | LiSi
// 元组
type Perple = [ZhangSan, LiSi]
声明合并:
type 不能重复定义相同的类型名,interface 定义相同的类型名会进行声明合并。
interface:
// interface
interface User {
name: string
}
interface User {
age: number
}
// 属性会被合并到User中
const user: User = {
name: '',
age: 18
}
type:
不能重复声明
总结
相同点
- 都能定义object类型和function类型
- 都能被继承,interface使用extends,type使用&
区别总结:
- 实现类型: type 可以定义基本类型,元组, 联合类型。interface 不行
- 声明合并: type 不能重复定义相同的类型名,interface 定义相同的类型名会进行声明合并
什么时候使用type
- 定义基础类型
- 定义函数类型
- 定义联合类型
- 定义元组类型
- 定义映射类型
什么时候使用interface
- 需要声明合并时
- 定义object类型时