【发布时间】:2019-12-09 13:11:51
【问题描述】:
我刚刚从 Angular 7.1.4 升级到 8.2.0,Typescript 3.1.6 升级到 3.5.3,RxJS
在升级之前,TS 正确地识别出这个数组项不是未定义的,但是现在我得到了这个令人沮丧的编译错误。 (注意,我在下面使用 lo-dash,但是如果我使用 if (autoCorrectionData[action.algorithmId] !== undefined) {,也会出现同样的错误
src/app/state/edit/edit.reducer.ts(417,29): error TS2532: Object is possibly 'undefined'.
在我使用if 条件检查后,如何让 TypeScript 识别对象已定义?
*edit* 这可能与最近对 NGRX 词典的更改有关,但我不知道为什么。字典值现在可以是未定义的。
【问题讨论】:
-
看来 TS 3.5 编译器需要指定对象的类型或使其明确。尝试以下操作:
const acd = autoCorrectionData as any或const acd = autoCorrectionData as Array<any>[或您的类型],然后按照acd更改您的代码。 -
在这种情况下,
autoCorrectionData已经输入为Dictionary<IAutoCorrectionDataForRegion> -
我想我可以做的是使用非空断言运算符
!手动断言数据已定义。不过,这不应该是必要的。 TS 之前很聪明,早就想通了,所以一定有办法。
标签: angular typescript ngrx rxjs6 ngrx-entity