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'
    }
}

你可能感兴趣的:(typescript,javascript,前端)