any 和 unknown的区别

  • any类型:
  1. 任何类型的值都可以赋值给 any 类型
  2. 类型 any 也可被可赋值给每一种类型
  • unknown类型:
  1. 任何类型的值都可以分配给 unknown 类型
  2. 类型 unknown 只能分配给 any 和 unknown 类型

type 和 interface的区别

相同点:

  1. 都可以描述一个对象或者函数
// 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
  1. 扩展(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

不同点:

  1. interface 只能表示 function、object 和 class类型,而 type 除了这些类型还可以表示其他类型
  2. interface 可以合并同名接口,type 则不行
  3. interface 可以继承(extends) interface 和 type。type通过交叉类型(Intersection Types) 【&】来继承 type 和 interface
  4. 类可以实现 interface 也可以实现 type【implements】