浅析TS 中的 never 和 interface

5,037 阅读1分钟

never

在TS中,有一个很特殊的类型,就是never,never只能在两种情况下使用

  • 函数永远不会有返回值时,例如 while(true){}
  const [n,setN] = React.useState<number>(1)
  const add: ()=>never = () => {
      while(true){ setN(i=>i+1) }
  }
  • 函数永远会抛出一个错误时。
  const fn: ()=>never = () => {
      throw new Error('error')
  }
  • 与void的差异 void 和 never 都是表示一个函数没有返回值,但是他们之间最大的区别是,void 表示可以被赋值的类型never表示其他任何类型也不能被赋值给它,它只能是never

interface 和 type 的区别

  • interface 只能声明 函数/对象
interface X {
	a: number
    b: string
}

interface Y {
	() => void
}
  • type 除了能声明 对象/函数 以外,还能为基础类型声明别名
type X = number | string
  • interface 能声明后进行合并
interface X {
	a: string
    b: number
}

interface X {
	c: boolean
}

// X = {
    a: string
    b: number
    c: boolean
    }