複数のメンバーを持つオブジェクトをエクスポートするノードモジュールの形状を記述する宣言ファイルがあります。このファイルは、foo/index.d.ts
に存在し、次のようになります。既存のTypescript宣言モジュールの内部メンバーをエクスポートする方法
interface Foo {
bar:() => void;
// ... more members here
}
declare var Foo: Foo;
export = Foo;
、コンパイルするとき、私は通常のように、モジュールを必要とし、使用することができます。
import * as Foo from 'foo';
Foo.bar();
をしかし、私は今もこれを行うことができるようにしたいです:
import * as bar from 'foo/bar';
bar();
私は宣言ファイルパス、モジュール、名前空間、およびコンテキストのすべての組み合わせを試してみたが、私はこの作業を取得することはできません。
import * as Foo from '..';
export = Foo.bar;
しかし、これはエラーになりやって:最も明白な、直感的な方法はとfoo/bar/index.d.ts
でファイルを作成することです'Foo' only refers to a type, but is being used as a namespace here.
は、どのように私は両方の外側のエクスポートモジュールを定義宣言ファイルを作成することができますし、内部のメンバーですか?
編集は:@cevekにより示唆されるようdeclare module
を使用しようとしましたが、これは "名前空間Fooのが見つかりません" というエラーがスローされます。
declare module "foo/bar" {
var bar: Foo.bar;
export = bar;
}
なぜあなたは ' "foo"から{bar}をインポートする; '?達成したいことは、ハックのように見えます。 –
どちらの部分? 'export ='は最低限必要です。これは 'module.exports ='(https://www.typescriptlang.org/docs/handbook/modules.html)を持つノードモジュールを記述しているので、標準的なハンドリング方法ですTSでこれ。もしそれが他のものなら、私は間違いなく少なくともハッキーなやり方でやっています。 – Andrew
私は 'foo/bar ';'から 'import *の代わりにバーを使用しています。私はあなたのユースケースがそれを許すかどうかわかりません。基本的には、標準のES6モジュールの機能を使用して、外部の型情報が必要なモジュール宣言を使用します( 'exports =' no)。 –