我正在将我的Ionic/Angular项目升级到Angular 16和最新的TypeScript
我有
"@angular/*": "^16.1.1"
"typescript": "^5.1.3",
"@ngrx/*": "^16.0.1"
当我跑的时候我得到了信息
[ng] TypeScript compiler options "target" and "useDefineForClassFields" are set to "ES2022" and "false" respectively by the Angular CLI. To control ECMA version and features use the Browerslist configuration. For more information, see https://angular.io/guide/build#configuring-browser-compatibility
[ng] NOTE: You can set the "target" to "ES2022" in the project's tsconfig to remove this warning.
[ng] ✔ Browser application bundle generation complete.
一切正常
因此,如果我接受上面的建议,并将TS“target”设置为“ES 2022,即tsocnfig.容斯现在有
"module": "es2020",
"target": "es2022",
"moduleResolution": "node",
....
它建立罚款没有错误,但我jut得到一个白色的窗口。
在看控制台,我明白了
TypeError: Cannot read properties of undefined (reading 'pipe')
at app.effects.ts:28:66
at createEffect (ngrx-effects.mjs:86:49)
at new CurrentShiftEffects (current-shift.effects.ts:28:45)
at Object.CurrentShiftEffects_Factory [as factory] (ɵfac.js:1:1)
at R3Injector.hydrate (core.mjs:9290:35)
at R3Injector.get (core.mjs:9178:33)
at injectInjectorOnly (core.mjs:651:33)
at ɵɵinject (core.mjs:655:60)
at inject (core.mjs:738:12)
at ngrx-effects.mjs:523:17
下面是有问题的代码(多年来一直如此)
@Injectable()
export class AppEffects {
constructor(private actions$: Actions, private dataService: DataService, private storage: LocalStorageService) { }
public hydrateState$ = createEffect(() => this.actions$.pipe( // <---- ERROR here. this.actions$ is null!
ofType(AppActions.hydrateState),
mergeMap(() =>
...
));
如果我在devtools调试器中放置一个断点,我首先会看到被调用的构造函数,注意这里定义了actions$...
现在继续按F8,我们进入下一个断点,现在this
中的所有内容都是未定义的(因此,当我们尝试访问this.actions$
上的pipe
时,会出现null错误
现在,如果我启用pause on exceptions
我到处都看到同样的东西,所以它完全坏了。
我还有另一个与this post相关的问题,但这个问题我可以通过将赋值移动到构造器中来解决。
但所有这些其他我不知道为什么会发生。而这一切都是由设置引起的,TS“目标”:“es 2022”.如果我把这个设置回es 2020,一切又都好了。
有人知道为什么这个推荐的目标会导致这个问题吗?
1条答案
按热度按时间jmo0nnb31#
我创建了一个新的Ionic/Angular项目,并将
tsconfig.json
与我自己的项目进行了比较,发现它有在
compilerOptions
中我加了这个,我所有的问题都消失了。
我的错误,Angular升级实际上添加了这个,但由于合并冲突的一些“手动编辑”,我在不知情的情况下删除了它。
这里有注解