环境模块可写属性

时间:2018-01-18 15:01:16

标签: typescript

我想在我的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中使用此模块?

1 个答案:

答案 0 :(得分:0)

这就是ES6模块的工作原理。导入被视为常量,只能由导出它们的模块修改。

如果您想设置该值,则必须在设置值的OtherModule.d.ts中加入一个setter。

export function setSomeProperty(newPropertyValue: string) {
    someProperty = newPropertyValue;
}

然后在导入后调用它。

如果您无法修改源*.d.ts文件,则应该可以使用require()语法代替导入,这样您就可以修改该属性。