是否有可能检测到不必要的类型保护?

问题描述 投票:3回答:2

我有以下打字稿代码:

type Nothing = undefined | null;
export const isNothing = <T>(val: T | Nothing): val is Nothing =>
  val === null || typeof val === 'undefined';

isNothing是一种类型保护,基本上检查是否设置了值。

我想在运行时之前检测以下内容:

const foo:number = 42;
if(isNothing(foo)) { /* ... */ }

这里的情况是类型保护是多余的。由于foo是显式键入的,因此不能为nullundefined

我一直在寻找以下几行的答案:

  • 如果isNothing不是联合类型,则重载never以返回类型val
  • 一些linter规则,当带有联合的函数的参数不是联合时进行标记(这感觉像是大锤方法)。
  • 一些明确地检测到不必要的类型保护的短绒规则

在这种情况下,“检测”可能是编译时错误,也可能是lint通知。重要的是,这将是运行前检测。

typescript static-analysis
2个回答
1
投票

正如我在上面的评论中解释的那样,如果检查是多余的,则没有这样的解决方案,类型保护程序本身将阻止代码编译。我认为“类型联合”一词在这种特殊情况下是指不为null且未定义的变量,因此isNothing类型防护检查将是多余的。


0
投票

我最终选择了:

© www.soinside.com 2019 - 2024. All rights reserved.