TypeScriptのES6 Moduleでexport varしたものに書き込む
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 するのは良くないのかもしれないです。