1

現在の状況:

以下で定義されたクラスがあります。

lib/components/widgets/MyWidget.ts:

export class MyWidget {

    public property1: string;
    /* ... more properties ... */

}

javascript にコンパイルされ、lib-min.jsの結果として他のファイルにバンドルされます。

lib/components/widgets/MyWidget.tsにあったため、次のような定義「コレクション」ファイル ( mydefinition.d.ts ) を作成しました。

declare module "lib/components/widgets" {
    export class MyWidget {

        /* documentation of property1 */
        public property1: string;

        /* ... more properties ... */
    }
}

interface MyOption {/* ... */}

このようにして、次のように使用できます (もちろん、lib-min.jsをページに含めた後):

import { MyWidget } from "lib/components/widgets/MyWidget";

let myInstance = new MyWidget();

問題:

この種の重複を維持することは圧倒的であり、簡単に間違いを犯す可能性があることは明らかだと思います. また、typescript 2+ (1.8.9 から) にアップグレードした後、「重複した識別子」に対していくつかのコンパイル エラーが発生し、通常は以前のように機能しません。

  • IMyWidget のようなインターフェイスを作成して公開することはできますが、実装が欠落しており、新しいものを作成できません
  • mydefinition.d.tsから「declare module...」を削除することはできますが、モジュール ローダーはモジュールを見つけられません (r.js オプティマイザーがそのパスからモジュールに名前を付けるため)。

質問

これを解決するためのクリーンで「安価な」方法はありますか (可能であればコードの重複を避けます)?

4

0 に答える 0