never在TypeScript当中指的是从来不会出现的值,一般来说可以用在两个地方:

    1. 一个总是返回错误的函数的返回值
    2. 一个没有返回值的函数(譬如陷入死循环)的返回值

    例子如下:

    1. function error(msg: string): never {
    2. throw new Error(msg)
    3. }
    4. function infiniteLoop(): never {
    5. while(true) {}
    6. }

    never是任何类型的子类型,所以可以赋值给任何类型。与此同时,任何类型(never除外)都不是never的子类型,所以除never外的类型都不能赋值给never。

    除此之外,一个跟never容易产生混淆的类型是void。never指的是不应该存在的类型,而void值是类型存在,只不过这个值为空。