しばらくの間、小さなライブラリからクラスをエクスポートしようとしていましたが、一箇所に書きました。私は各クラスが外部に利用可能にされる方法には無関係であることを望みますが、これまでに働くことはできません。TypeScriptクラスを別のファイルからエクスポートしました。
のは、私はクラスFoo
// lib/foo.ts
export class Foo {}
とBar
// lib/bar.ts
export class Bar {}
は、今私はMyModule
名前空間を経由して、パッケージを使用しています誰に利用可能なものを作りたいクラスを持っていると仮定しましょう、これはありますどこが厄介なのか。クラス自体とは別の場所で定義されている名前空間から既存のクラスをエクスポートする方法はわかりません。それが有効な活字体ではないので
明らかに、これは動作しません。
// api.ts
import { Foo } from "./lib/foo";
import { Bar } from "./lib/bar";
export namespace MyModule {
export Foo;
export namespace MySubModule {
export Bar;
}
}
を、私はこれには2つの潜在的な解決策を発見したが、両方が自分の欠点を持っています。私は、変数を定義し、それにクラスを割り当てることができます。
// api.ts
import { Foo as MyFoo } from "./lib/foo";
import { Bar as MyBar } from "./lib/bar";
export namespace MyModule {
export const Foo = MyFoo;
export namespace MySubModule {
export const Bar = MyBar;
}
}
私はnew MyModule.MySubModule.Bar
のような外部の場所からクラスのインスタンスを作成することができますが、私のタイプとして、それらを使用する可能性を与えることはありません実際には、この意志
let myBarInstance: MyModule.MySubModule.Bar;
は.MySubModuleが
をなしエクスポートメンバー 'バー' を持っているモジュール "パス/に/モジュール/ API" という内容の活字体のエラーがスローされます
他の方法で回避、私が代わりにconst
のexport type Bar = MyBar
を使用しようとした一方で
let myBarInstance: MyModule.MySubModule.Bar
を言ったときに、これは動作しますが、それは単なるタイプの別名だから、私は自然にMyModule.MySubModule.Bar
をインスタンス化することはできません。
これはすべてFoo
クラスの場合と同じです。
誰もこれについて何か経験がありますか?TypeScriptが提供している他のエクスポート機能を見落としたことがありますか?