any 和 unknown的区别
- any类型:
- 任何类型的值都可以赋值给 any 类型
- 类型 any 也可被可赋值给每一种类型
- unknown类型:
- 任何类型的值都可以分配给 unknown 类型
- 类型 unknown 只能分配给 any 和 unknown 类型
type 和 interface的区别
相同点:
- 都可以描述一个对象或者函数
// interface
interface Person {
name: string,
age: number
}
interface Say {
(type: number, source: boolean): void
}
// type
type Person = {
name: string,
age: number
}
type Say = (type: number, source: boolean): void
- 扩展(extends)与交叉类型(Intersection Types) interface 可以 extends, 但type不允许 extends 和 implement。但是 type 可以通过交叉类型 实现 interface 的 extend 行为。
// interface extends interface
interface Animal {
color: string
}
interface Cat extends Animal {
isFire: boolean
}
// type & type Intersection
type Animal = {
color: string
}
type Cat = Animal & {isFire: boolean }
// interface extends type
type Animal = {
color: string
}
interface Cat extends Animal {
isFire: boolean
}
// type & interface Intersection
interface Animal {
color: string
}
type Cat = Animal & { isFire: boolean }
总结:interface 可以 extends interface 和 type. type 可以 Intersection type 和 interface
不同点:
- interface 只能表示 function、object 和 class类型,而 type 除了这些类型还可以表示其他类型
- interface 可以合并同名接口,type 则不行
- interface 可以继承(extends) interface 和 type。type通过交叉类型(Intersection Types) 【&】来继承 type 和 interface
- 类可以实现 interface 也可以实现 type【implements】