かなり単純な状況で奇妙なエラーが発生しました。宣言生成時に「名前を付けることができません」
ファイルThingA.ts
export class ThingA {
}
ファイルThingB.ts
export class ThingB {
}
ファイルThings.ts
(再輸出)
export {ThingA} from "./ThingA";
export {ThingB} from "./ThingB";
ファイルTest.ts
(再輸出のクラスを使用しています)
import * as things from "./Things";
export class Test {
public method = (input: things.ThingA) => {
};
}
これは私がコンパイルに使用するものである:
tsc Test.ts --declaration --outDir compiled
(typescriptですバージョン1.8.10)そして、これは私が取得エラーです:
Test.ts(5,5): error TS4029: Public property 'method' of exported class has or is using name 'ThingA' from external module ".../ThingA" but cannot be named.
問題はの宣言ファイルを生成することにありますTest.ts
。すべてのファイルは.jsにコンパイルされ、上記のエラーのためにTest.ts
を除き、各ファイルには.d.tsが生成されます。 --declaration
がコンパイルコマンドから削除された場合、エラーはありません。
いくつかの観察は:
1)エラーがthings.ThingA
のすべての参照は表示されません。指定された例のようにメソッドのパラメータとして参照される場合、または戻り値として参照される場合、エラーが表示されます。メソッド本体で参照されている場合、エラーはありません。これは、メソッド本体のリファレンスが生成された.d.tsには言及されないためですが、tscがthings.ThingA
参照から実際のクラスタイプを推論できない理由はまだ分かりません。私はこれにTest.ts
でimport文を変更した場合
2):
import {ThingA,ThingB} from "./Things";
(代わりに)
import * as things
の
、さらに使用ThingA
を直接、エラーはありません。これは実際には解決策ではなく、その目的を破るか、再輸出するようなものです。
3)もしをexport class Test {
からTest.ts
に削除しても、エラーはありませんが、Test.d.ts
ファイルは空です。そうでない場合でも、Test.ts
に相当するものが別のファイルで使用(インポート)されるため、クラスTest
をエクスポートする必要がある実際のコードの単純なケースであるため、これも解決策ではありません。
ここで何か問題がありますか?
ちょうど.d.tsファイルを維持しながら、外部モジュールに内蔵TSモジュール(名前空間)からプロジェクトを変換しようとすると、今日のこの同じ問題に遭遇しました。 .d.tsファイルを生成できるようにする必要があるので、これはダンパーを全体に置きます。これを別のTSプロジェクトに含めることができます。 :( – robyoder