TypeScriptのES6 Moduleでexport varしたものに書き込む

TOC

  1. 方法1:namespace で囲む
  2. 方法2:setter となる関数を使う
  3. まとめ

TypeScriptで、次のようにしたい時があります。

1
export var field1 = "foo";
1
2
3
import {field1} from "./export";
// エラーになる
field1 = "bar";

しかし、エラーになります。

1
> Invalid left-hand side of assignment expression.

方法1:namespace で囲む

これは、変数を namespace(旧 module )で
囲ってあげることで解決できます。

1
2
3
export namespace fields {
export var field1 = "foo";
}
1
2
import {fields} from "./export";
fields.field1 = "bar";

前は、namespace を、module と定義していましたが、
ES6 module と混同してしまうので、
これからは、namespace を使います。

方法2:setter となる関数を使う

1
2
3
4
var field1 = "foo";
export function setField1(text:string) {
field1 = text;
}
1
2
import {setField1} from "./export";
setField1("bar");

まとめ

仕様がムズカシイ。
どうやら export default var とかもエラーになるから、
直接フィールドを export するのは良くないのかもしれないです。