typescript基础之never

TypeScript 的 never 类型是一种特殊的类型,它表示的是那些永远不存在的值的类型。例如,一个抛出异常或无限循环的函数的返回值类型就是 never,因为它们永远不会返回任何值。never 类型是所有类型的子类型,也就是说,任何类型都可以赋值给 never 类型,但是 never 类型只能赋值给自己和 any 类型。never 类型有以下的特点和用途https://juejin.cn/post/7201048368389914682:

•  never 类型不能被实例化,也不能有任何值,甚至 undefined 也不行。

•  never 类型可以用来表示不可能发生的情况,例如在 switch 语句中的 default 分支,或者在类型保护中排除掉所有可能的情况。

•  never 类型可以用来进行疲劳性检查(exhaustiveness check),也就是检查是否所有的分支都被覆盖到了,如果有遗漏,就会报错。

下面是一些使用 never 类型的例子:

// 抛出异常的函数的返回值类型是 never
function throwError(message: string): never {
    throw new Error(message);
}

// 无限循环的函数的返回值类型也是 never
function loopForever(): never {
    while (true) {}
}

// 使用 never 类型来表示不可能发生的情况
type Direction = "up" | "down" | "left" | "right";

function move(direction: Direction) {
    switch (direction) {
    case "up":
        // do something
        break;
    case "down":
        // do something
        break;
    case "left":
        // do something
        break;
    case "right":
        // do something
        break;
    default:
        // 如果有遗漏的情况,就会报错
        const invalid: never = direction;
        // Error: Type 'string' is not assignable to type 'never'
    }
}

// 使用 never 类型来进行疲劳性检查
class ExhaustiveError extends Error {
    constructor(value: never, message?: string) {
        super(message);
    }
}

function checkExhaustive(value: Direction) {
    switch (value) {
    case "up":
        // do something
        break;
    case "down":
        // do something
        break;
    default:
        // 如果有遗漏的情况,就会抛出异常
        throw new ExhaustiveError(value);
        // Error: Argument of type 'string' is not assignable to parameter of type 'never'
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

韩小浪~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值