我想在我的TypeScript文件中使用来自其他团队的JavaScript AMD模块。为此我创建了一个像这样的OtherModule.d.ts文件:
declare module 'some/Path/OtherModule' {
...
export let someProperty : string;
...
}
在我的TypeScript文件中,我必须修改 someProperty 的值。那个模块是如何工作的,我无法改变它。所以我喜欢这个:
import * as OtherModule from 'some/Path/OtherModule';
...
OtherModule.someProperty = "I want to set something here";
...
但是TypeScript并不是那样的。我收到以下错误:
无法分配给某些属性'因为它是常量或只读属性。
注意我在d.ts文件中没有使用 const 或 readonly 。那么发生了什么?我如何在TypeScript中使用此模块?
答案 0 :(得分:0)
这就是ES6模块的工作原理。导入被视为常量,只能由导出它们的模块修改。
如果您想设置该值,则必须在设置值的OtherModule.d.ts
中加入一个setter。
export function setSomeProperty(newPropertyValue: string) {
someProperty = newPropertyValue;
}
然后在导入后调用它。
如果您无法修改源*.d.ts
文件,则应该可以使用require()
语法代替导入,这样您就可以修改该属性。