假设我们有以下声明:
interface Inf1 {
field: boolean | undefined;
}
interface Inf2 {
field: Inf1 | undefined
}
interface Inf3 {
field: Inf2 | undefined
}
function fun1(): Inf3 | undefined {
return {field: {field: {field: true}}};
}
我想检查fun1()
返回的对象中的第三嵌套字段是否等于true
(或其他任何值)。首先尝试是:
if (value.field.field.field) {
console.log('This code does not compile because nested `field` objects may be undefined.');
}
什么会导致编译错误,因为中间的field
可能是undefined
。
我需要编译此代码的是检查所有嵌套对象是否不是undefined
:
let value = fun1();
if (
value &&
value.field &&
value.field.field &&
value.field.field.field
) {
console.log('This code is compiled successfully');
}
有没有办法“即时”检查中间的那些“田地”不是未定义的?
答案 0 :(得分:1)
您所需的功能在JavaScript中不存在,因此,是的,您必须通过这种测试来保护代码:
if (value && value.field && value.field.field)
使用strict
(或strictNullCheck
)选项,TypeScript可以帮助您考虑每个潜在的未定义值,但不会帮助您编写保护代码。
但是有改进的希望。关于"Optional Chaining for JavaScript"功能的建议仍处于第1阶段,但非常活跃。提案到达第3阶段时,也许TypeScript团队可以在TypeScript编译器中启动an implementation?