视频位置 TypeScript快速梳理_上篇 44:05

never 不是用来限制变量的,而是用来限制函数的返回类型

never 的含义是:任何值都不是,即:不能存任何值。
例如 undefined 、 nul l 、 ‘’ 、 0 都不⾏!

1. ⼏乎不⽤ never 去直接 限制 变量,因为没有意义

例如:

/* 指定a的类型为never,那就意味着a以后不能存任何的数据了 */
let a: never

//测试:
// 以下对a的所有赋值都会 有警告
a = 1
a = true
a = undefined
a = null

2. never 也可⽤于 限制 函数的 返回值

//如果返回值限制为 never, 那么只有两种情况:
//    1.不能顺利的调用结束。 因为只要顺利结束,就会返回undefined。
//    2.进入该函数后,永远调不完( while() 或 递归 )。
function demo():never{
    //如果不写返回值 也有警告。 因为默认返回 undefined 。

    //可适用于抛出错误,并终止当前线程运行:
    throw new Error('程序运行异常')
}

3. never ⼀般是 TypeScript 主动推断 出来的

// 指定a的类型为string
let a: string
// 给a设置⼀个值
a = 'hello'

a = 9 //此行会被警告。 ts会自动推断,如果a不是字符串就不让给。 并不是我们想着此处a=9就会执行下面的else。

if (typeof a === 'string') {
    console.log(a.toUpperCase())
} else {

    console.log(a) //ts 会推断出此处的 a是never,因为没有任何⼀个值符合此处的∈ts的自动推断逻辑
}