假设我们有以下声明: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'); }有没有一种方法可以“即时”检查中间的那些“字段”是否未定义?
1 回答

守着一只汪
TA贡献1872条经验 获得超3个赞
您所需的功能在JavaScript中不存在,因此,是的,您必须通过这种测试来保护代码:
if (value && value.field && value.field.field)
使用strict
(或strictNullCheck
)选项,TypeScript可帮助您考虑每个潜在的未定义值,但不会帮助您编写保护代码。
但仍有改进的希望。关于“ JavaScript的可选链接”功能的提案仍处于第1阶段,但是非常活跃。当提案到达第3阶段时,TypeScript团队是否可以在TypeScript编译器中启动实现?
添加回答
举报
0/150
提交
取消