我有一个
started
标志,然后是有关某些操作进度的其他数据。
let started: boolean = false;
let foo: number|undefined = undefined;
let bar: string|undefined = undefined;
在操作开始之前,任何其他数据都是
undefined
。foo
可能是 undefined
,因为我没有明确地将它链接到 started
。
function mutate() {
if (!started) return;
foo++;
bar = "qaax";
}
有没有办法告诉打字稿,
foo
和bar
仅在started
为false
时未定义,如果没有,那么处理此类数据存在依赖于的情况的最佳方法是什么其他一些数据的价值?
潜在的解决方案:
我可以使用 -1 而不是 undefined,但这可读性较差,有时数据会使用 -1。
或者,我可以单独检查
foo
和 bar
是否未定义,但是对于更复杂的数据,这会变得极其低效。
由于操作是否已开始是单独跟踪的,因此我可以将
foo
和 bar
保留为任何值,因为一旦操作开始,它们的值将被重置为有意义的值。然而,这又会降低可读性。
类型检查器无法从运行时状态推断变量是否未定义。 所以可选的链接运算符“?”引入是为了减少样板代码,如下所述https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#optical-chaining。 这只是手动检查“foo”是否未定义的简写。