美文网首页
TypeScript12(never类型)

TypeScript12(never类型)

作者: BingJS | 来源:发表于2022-03-14 22:14 被阅读0次

TypeScript 将使用 never 类型来表示不应该存在的状态(很抽象是不是)

// 返回never的函数必须存在无法达到的终点
 
// 因为必定抛出异常,所以 error 将不会有返回值
function error(message: string): never {
    throw new Error(message);
}
 
// 因为存在死循环,所以 loop 将不会有返回值
function loop(): never {
    while (true) {
    }
}

never 与 void 的差异

//void类型只是没有返回值 但本身不会出错
function Void():void {
    console.log();
}
 
//只会抛出异常没有返回值
function Never():never {
    throw new Error('aaa')
}

never 类型的一个应用场景

举一个我们可能会见到的例子

interface A {
    type: "foo"
}
interface B {
    type: "bar"
}
type All = A | B ;
function handleValue(val: All) {
    switch (val.type) {
        case 'foo':
            break;
        case 'bar':
            break
        default:
            //兜底逻辑 一般是不会进入这儿如果进来了就是程序异常了
            const exhaustiveCheck:never = val;
            break
    }
}

比如新来了一个同事他新增了一个C接口,我们必须手动找到所有 switch 代码并处理,否则将有可能引入 BUG 。
而且这将是一个“隐蔽型”的BUG,如果回归面不够广,很难发现此类BUG。
那 TS 有没有办法帮助我们在类型检查阶段发现这个问题呢?

interface A {
    type: "foo"
}
interface B {
    type: "bar"
}
interface C {
    type: "bizz"
}
type All = A | B | C;
function handleValue(val: All) {
    switch (val.type) {
        case 'foo':
            break;
        case 'bar':
            break
        default:
            //兜底逻辑 一般是不会进入这儿如果进来了就是程序异常了
 
            const exhaustiveCheck: never = val;
            break
    }
}

由于任何类型都不能赋值给 never 类型的变量,所以当存在进入 default 分支的可能性时,TS的类型检查会及时帮我们发现这个问题

相关文章

  • TypeScript12(never类型)

    TypeScript 将使用 never 类型来表示不应该存在的状态(很抽象是不是) never 与 void 的...

  • TypeScript 类型Never 和 类型断言

    never类型 never类型表示的是那些永不存在的值的类型。 例如, never类型是那些总是会抛出异常或根本就...

  • Typescript

    什么是Typescript Never Never类型表示的是那些永不存在的值的类型。 使用小写的never声明一...

  • TypeScript基础类型

    never 类型 never 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值。这...

  • never类型与穷尽性检查

    never类型与穷尽性检查 never 表示不存在的状态

  • TS变量

    数据类型 JS 七种类型 + 枚举 + any + void + never 声明了类型,若想转其他类型,可直接a...

  • 函数相关类型

    函数类型可以包含:基础类型、对象类型: void:可以包含所有的类型不要声明返回值never:不可能执行到最后; ...

  • 押题TS、Webpack

    TS never 类型是什么?不应该出现的类型TypeScript 比起 JavaScript 有什么优点?提供了...

  • 【TS基础】数据类型及特性讲解—接口

    数据类型 JS 七种类型 + 枚举 + any + void + never 1、 枚举(enum)可以这样理解,...

  • TypeScript+Webpack+安全+发散

    1. never 类型是什么? 不应该出现的类型 2. TypeScript 比起 JavaScript 有什么优...

网友评论

      本文标题:TypeScript12(never类型)

      本文链接:https://www.haomeiwen.com/subject/dmxkdrtx.html