Angular项目报TS2322错误:unknown类型无法赋值给{}类型如何修复?
问题修复方案
该报错由TypeScript的严格属性初始化校验规则触发,Angular 11默认开启了该规则,要求类中声明的所有属性必须在构造函数中完成赋值,或者在声明时直接初始化,未满足要求就会抛出编译错误,本地执行ng serve的报错也源于此。
可根据业务场景选择以下任意一种方案修复:
方案一:声明时直接初始化属性
若你可以在声明时就确定初始值,直接给属性赋值即可,同时建议补充明确的类型定义提升可维护性:export class ProductFormComponent implements OnInit { // 若categories$是返回分类列表的Observable,可替换any为实际的分类类型定义 categories$: Observable<any> | undefined = undefined; // 给product指定索引类型同时初始化为空对象 product: {[key: string]: any} = {};方案二:使用非空断言标记属性
若你确定会在ngOnInit或者其他生命周期钩子中给属性赋值,不会出现访问时未定义的情况,可以用!非空断言符告诉TypeScript该属性一定会被赋值,跳过初始化校验:export class ProductFormComponent implements OnInit { categories$!: Observable<any>; product!: {[key: string]: any}; ngOnInit(): void { // 此处补充给两个属性赋值的业务逻辑即可 }方案三:关闭校验规则(不推荐)
若不想调整业务代码,可以在项目根目录的tsconfig.json中修改配置,关闭严格属性初始化校验:{ "compilerOptions": { // 其他配置保持不变 "strictPropertyInitialization": false } }
修改完成后重新执行ng serve启动项目即可解决报错。
内容的提问来源于stack exchange,提问作者LPedro7
相关产品推荐
相关产品推荐

