我是靠谱客的博主 动听电脑,这篇文章主要介绍TypeScript12 - never类型,现在分享给大家,希望可以做个参考。

TypeScript使用 never 类型来表示不应该存在的状态

复制代码
1
2
3
4
5
6
7
8
9
10
11
type bbb = string & number // TS推断出never类型,因为是不可能出现的 function error(msg: string): never { throw new Error(msg) } // 因为必定抛出异常,所以 error 将不会有返回值 function loop(): never { while (true) { } } // 因为存在死循环,所以loop将不会有返回值

never类型的一个应用场景

比如我们定义一个switch,都要定义一个default兜底逻辑,如果进入这一步,说明就是程序异常了

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
interface A { type: "Tom" } interface B { type: "Jerry" } type All = A | B function type(val: All) { switch (val.type) { case "Tom": break; case "Jerry": break; default: const check: never = val break; } }

比如我新增一个C接口,我们必须手动找到搜有的switch代码并处理,否则将会触发bug

而且这将是一个“隐蔽性”的bug,如果回归面不够广,很难发现此类bug

那TS有没有办法帮助我们在类型检查阶段发现这个问题呢?

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
interface A { type: "Tom" } interface B { type: "Jerry" } interface C { type: "bizz" } type All = A | B | C function type(val: All) { switch (val.type) { case "Tom": break; case "Jerry": break; default: // 因为没有加入条件,所以会触发兜底函数并且会检测出异常 const check: never = val break; } }

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

never 和 viod 的差异

复制代码
1
2
3
4
5
6
7
8
// void类型只是没有返回值,但本身不会出错 function Fn01(): void { console.log(123) } // 只会抛出异常没有返回值 function Fn02(): never { throw new Error("error") }

最后

以上就是动听电脑最近收集整理的关于TypeScript12 - never类型的全部内容,更多相关TypeScript12内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部