私のTypescriptコードでサードパーティの名前空間Foo
を使用しているとします。Typescriptで名前空間を別の名前でエクスポートする方法
Utility.Foo
モジュール内に、このモジュール用のユーティリティ関数をいくつか書きたいと思います。
オリジナルのFoo
は、Utility.Foo
の中で定義された関数に隠れてしまうという問題があります。
ことを回避するために、私は以下のような何か書きたい:
namespace Utility {
namespace _Foo {
export function bar() {
return Foo.x;
}
}
export {_Foo as Foo};
}
、それは上記のコードを使用して
var Utility;
(function (Utility) {
var _Foo;
(function (_Foo) {
_Foo.bar = function() {
return Foo.x;
};
})(_Foo || (_Foo = {}));
Utility.Foo = _Foo;
})(Utility || (Utility = {}));
にES3でtranspiledされるだろうが、私はよエラーが発生する
TS1194:エクスポートの宣言は名前空間で許可されていません
なぜこのエラーが発生しますか?
これを達成するための適切な方法は何ですか?私はUtility.Foo
に直接私のユーティリティ関数を定義した場合
EDIT
私はPaleo's answerにコメントしたように、オリジナルのFoo
モジュールを効果的に隠されています。
var Foo = { x : 42 };
namespace Utility {
export namespace Foo {
export function bar() {
return Foo.x;
}
}
}
それは、このようES3にtranspiledされています:私たちはUtility.Fooモジュールが内蔵されているかを見れば
var Foo = { x: 42 };
var Utility;
(function (Utility) {
var Foo;
(function (Foo) {
function bar() {
return Foo.x;
}
Foo.bar = bar;
})(Foo = Utility.Foo || (Utility.Foo = {}));
})(Utility || (Utility = {}));
なぜ、のは、以下の活字体のコードを見てみましょう理解する
bar
機能からアクセス可能なFoo
が実際にはUtility.Foo = {}
であることがわかります。したがってbar
はundefined
を返します。
私は 'Utility.Foo.bar'呼び出すと、それは' undefined'を返します。 'Utility.Foo.bar'にブレークポイントを置くと、' Foo'がオーバーライドされていることがわかります。ここでは、蒸留されたJSへの[link](http://pastebin.com/8E75xqii)です。元の 'Foo'モジュールはローカル' Foo'によって隠されていることがわかります。これは 'Utility.Foo = {}'です。 – Antoine
@Antoine、申し訳ありませんが、元の 'Foo'が' Utility'という名前空間にあったのを思い出しました。私は編集しました。 – Paleo
ありがとうございます。 :)ところで、あなたは 'export {_Foo as Foo} 'を使うことができない理由を知っていますか? – Antoine