typescript - strictNullChecks 和空值传播

标签 typescript

我想开始使用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 代替。

如果应用程序中的 nullundefined 值之间存在语义差异,则可能会导致困惑(在 TS 和普通 JS 中)。如果不这样做,并且只是随机返回 null/undefined,则仅使用一个会更简单且更一致。

就使用哪个而言,我建议 undefined 主要是因为 TypeScript 对它的支持稍好一些(即 )。有人认为仅使用 null 代替,它只是更冗长,并且使用 undefined 作为丢失数据的指示符通常很方便,因为它是每个未初始化变量的默认值/field,并且这些应该通常与明确不可用的数据具有相同的语义和行为。

关于typescript - strictNullChecks 和空值传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57178216/

相关文章:

typescript - 如何模拟 "T extends enum"通用约束?

typescript - Angular 2 promise 问题

typescript - TS 将单独的类型文件导入单个 index.d.ts 文件

typescript - export=typeof import() 是什么意思?

typescript - 如何使用 redux-thunk 和 TypeScript 调度 ThunkAction

angular - 如何在不相关的组件之间传递数据 angular 10

typescript 歧视联盟允许无效状态

javascript - 在 Angular 2 中导入 Pivottable js

typescript - 我的应用关闭时可以启动 Electron 更新程序更新吗?

javascript - Angular 2 : Rendering the same component with different ids