Typescriptでnamespace使うとimportができない
Typescriptでハマったのでメモ
namespace内のクラスでEventEmitterを使おうとしたところエラーになった
namespace Example { import * as events from "events"; //Error: Import declarations in a namespace cannot reference a module. export class Test { constructor(){} } }
ぐぬぬ、ならばnamescape外に書けばいいんだな
import * as events from "events"; namespace Example { export class Test { constructor(){} } }
これで一安心……と思ったら参照先でエラーになっている……
import Test = Example.Test//ここがエラーになる
ど、どうすればいいんだ???
悩みに悩んだ結果、namespace を勘違いしていた模様 (javaの感覚で使っていた……)
そもそも、TypeScriptは1ファイル1モジュール。namespaceは1ファイル内でモジュールの構造を作るために使うもの(内部モジュール) よって、namespaceなんて書かなければ問題はした。TypeScriptなれるまでまだもうちょっと時間かかりそう……
import * as events from "events"; export class Test { constructor(){} }
import * as test from "./test.ts"
追記(2016/03/27)
id:ConquestArrow さんから指摘があったので修正
namescapeもexportをつけることで外部から参照できるようになるそうだ
つまり、このように書けば参照できる。なるほど。勉強になった
export namespace Example { //中略 }