在Angular组件的TypeScript类中定义变量报ts2564错误如何解决?
错误产生原因
该报错是TypeScript的严格属性初始化校验规则触发的,Angular新建项目默认会在tsconfig.json中开启strictPropertyInitialization配置项,要求所有类实例属性必须满足以下两个条件之一,否则就会抛出TS2564错误:
- 变量声明时就完成初始化赋值
- 在类的构造函数内部完成赋值
你声明的nombre1既没有赋初始值,也没有在构造函数中赋值,因此触发了校验报错。
修正方案
共有4种常用的修正方式,可根据你的业务场景选择:
- 方案1:声明时直接赋初始值(最推荐)
直接在声明变量时给对应类型的初始值即可,示例:export class AppComponent { title = 'Welcome'; nombre1 : number = 0; // 按业务需求设置初始值即可 } - 方案2:在构造函数中赋值
如果你的初始值需要依赖构造时的参数计算,可以在构造函数内完成赋值:export class AppComponent { title = 'Welcome'; nombre1 : number; constructor() { // 可在这里加入赋值逻辑,示例直接给固定值 this.nombre1 = 0; } } - 方案3:使用确定赋值断言
如果你确定会在ngOnInit等Angular生命周期钩子、或者其他时机给该变量赋值,不会出现undefined的情况,可以给变量加确定赋值断言标记!,告诉TypeScript无需校验该变量的初始化情况:export class AppComponent { title = 'Welcome'; nombre1! : number; // 加!标记即可消除报错 } - 方案4:关闭严格属性初始化校验(不推荐)
如果不需要该校验规则,可以修改项目根目录下的tsconfig.json,在compilerOptions配置项中新增/修改:
该方式会全局关闭相关校验,失去对应的类型安全保障,不建议使用。"strictPropertyInitialization": false
内容的提问来源于stack exchange,提问作者bib
相关产品推荐
相关产品推荐

