Javascript初始化导入类时出现Cannot assign to 'import class'错误怎么办
问题成因
报错是由你对象字面量中b属性的错误赋值语法导致的:
- 你写的
b: B = { bar: 5 }并不是「给b属性标注类型为B,同时赋值为{bar:5}」的合法语法。这行代码的实际执行逻辑是:先尝试将{bar:5}赋值给导入的类标识符B,再把赋值结果作为b属性的值。 - ES 模块规范中,导入的绑定是只读的,不允许在导入文件中修改导入的类、变量等内容,因此直接触发了
Cannot assign to 'B' because it is an import的错误。 - 额外说明:你已经在外层给
myVariable标注了A类型,TypeScript 会自动校验b属性是否符合B类型的结构,不需要在对象字面量的属性位置重复标注类型。
解决方法
根据你的使用场景可以选择两种方案:
方案1:直接赋值符合结构的对象(不需要B类实例)
如果你的业务逻辑不需要b是B类的实例(不需要调用B的类方法、不需要用instanceof B做类型判断),直接去掉B =的错误语法,赋值符合B类型结构的对象即可:
import { A, B } from '../models/class'; export const myVariable: A = { foo: 'FOO', b: { bar: 5 } }
方案2:实例化B类再赋值(需要B类实例)
如果需要b是B类的真实实例,使用new关键字创建实例后再赋值即可:
import { A, B } from '../models/class'; // 创建B类实例并赋值属性 const bInstance = new B(); bInstance.bar = 5; export const myVariable: A = { foo: 'FOO', b: bInstance }
你也可以给B类添加构造函数简化初始化逻辑:
// ../models/class 文件中修改B类定义 export class B { constructor(public bar: number) {} } // 导入方的代码可以简化为 export const myVariable: A = { foo: 'FOO', b: new B(5) }
内容的提问来源于stack exchange,提问作者Patrick Vibild
相关产品推荐
相关产品推荐

