P粉1945410722023-08-25 11:31:36
这是有意的行为。 在TypeScript GitHub存储库上查看此问题的长时间讨论
你的strictNullChecks
关闭了;尝试打开它。
P粉3302320962023-08-25 11:19:47
TypeScript 4.1引入了一个--noUncheckedIndexedAccess
编译器标志,实现了在microsoft/TypeScript#13778中提出的建议,以考虑这种情况下的undefined
。请注意,该功能不会作为--strict
编译选项集的一部分启用,并且被称为“严格的索引签名”,因为它会在程序员可能不希望或期望的情况下发出关于undefined
的警告。
您已经发现索引签名不会像可选属性那样将| undefined
添加到元素类型中。在microsoft/TypeScript#13778上提出了创建一个编译器选项来实现这一点的建议。您可以阅读该建议中的评论;它们链接到其他问题,但共识是高错误率几乎使其无用。
还提到您可以手动将| undefined
添加到元素类型中:
const list: (Item | undefined)[] = [{ id: 'a' }, { id: 'b' }];
这将按您的预期工作,而不会影响整个语言。