我想开始使用strictNullChecks
标记在一个非常大的代码库中。这绝对是一个非常有用的标志,但我开始在大多数接口(interface)定义中包含空类型。也许这是个人看法,因为我以前从未使用过该标志,但它开始降低代码的可读性(恕我直言)。我有一种感觉,null 无处不在。一切都源于一个返回 <type> | null
的函数它在函数调用堆栈中向上传播,迫使我在接口(interface)中也包含 null 类型。
大多数时候我有可选的可为空字段,例如:
interface X {
field?: string | null
}
当 null 和 undefined 都是假值时,这种事情有点奇怪。
我考虑过用 undefined 替换 null 类型,例如: <type> | undefined
从可选接口(interface)字段中删除空类型,所以我只有:
interface X {
field?: string
}
但是我失去了 null 的语义值,这是我想要维护的。
那么,您对 strictNullChecks 有何看法?你找到这样的字段吗field?: string | null
有点奇怪还是你喜欢并且感觉舒服的东西?
最佳答案
就我个人而言,我建议完全删除 null
并使用 undefined
代替。
如果应用程序中的 null
和 undefined
值之间存在语义差异,则可能会导致困惑(在 TS 和普通 JS 中)。如果不这样做,并且只是随机返回 null
/undefined
,则仅使用一个会更简单且更一致。
就使用哪个而言,我建议 undefined
主要是因为 TypeScript 对它的支持稍好一些(即 ?
)。有人认为仅使用 null
代替,它只是更冗长,并且使用 undefined
作为丢失数据的指示符通常很方便,因为它是每个未初始化变量的默认值/field,并且这些应该通常与明确不可用的数据具有相同的语义和行为。
关于typescript - strictNullChecks 和空值传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57178216/