我是靠谱客的博主 老实白昼,最近开发中收集的这篇文章主要介绍TypeScript13(never类型)never 与 void 的差异never 类型的应用场景,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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的

类型检查会及时帮我们发现这个问题

最后

以上就是老实白昼为你收集整理的TypeScript13(never类型)never 与 void 的差异never 类型的应用场景的全部内容,希望文章能够帮你解决TypeScript13(never类型)never 与 void 的差异never 类型的应用场景所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部