2016-10-16 2 views
1

型パラメータ(<T>)をとり、インタフェース(my_interface)を実装するいくつかのクラスを定義するモジュールがあります。メンバがクラスであるオブジェクトのインタフェース

// [my_module.ts] 
import {my_interface} from ".\typings.d.ts" 
export class Class_A <T> implements my_interface { 
    blah blah blah; 
} 
export class Class_B <T> implements my_interface { 
    blah blah blah; 
} 

と私はクラスインスタンスのためのインタフェースを定義.d.tsファイルがあります:私は、全体としてモジュールを説明するが、以下は「TS2304を上げるインタフェースを追加したい

// [typings.d.ts] 
export interface my_interface <T> { 
    blah:blah; 
} 

を:名前 'T'を見つけることができません。 "エラー:

// [typings.d.ts] 
export interface MY_MODULE { 
    Class_A: my_interface<T>; 
    Class_B: my_interface<T>; 
} 

と次のことが上げ(MY_MODULE)インターフェイスを作成する方法はあり

// [typings.d.ts] 
export interface MY_MODULE { 
    Class_A: my_interface; 
    Class_B: my_interface; 
} 

:エラー "TS2314ジェネリック型 'my_interfaceは' 1型引数(複数可)が必要です"

var my_module:MY_MODULE = require("my_module") 
+0

モジュールのタイプを定義する必要はありません。コンパイラは、モジュール自体についてすべてを推論する必要があります。後で必要があれば、 'typeof my_module'を実行することができます。 –

+0

モジュールがコンパイルされたJSファイルからインポートされたとき、つまりモジュールが 'npm'または' bower'を介してインストールされたときではありません。だから私は '.d.ts'ファイルを書いています。 – Jthorpe

+0

さて、あなたは定義ファイルを参照しようとしました: '/// '? –

答えて

1

私はあなたが有意義ここにジェネリックを使用している場合疑問にあります。コンパイルJSコードを経由して輸入されたときにインポートされるオブジェクトを説明します。とにかく、あなたがやりたいことをするための抵抗が少なかったのはこれです:MY_MODULE generic。

export interface MY_MODULE<T> { 
    Class_A: my_interface<T>; 
    Class_B: my_interface<T>; 
} 

パラメータが正しく解決されます。あなたはこれは、いくつかの意味があり、それに供給されます気に先に行くと

var my_module:MY_MODULE<any> = require("my_module") 

をしない場合、インポートでは、その後、

var my_module:MY_MODULE<type-here> = require("my_module") 

として、それを入力します。つまり、type_Atype_Bはどちらも同じタイプの汎用ではありません。これは意図されていますか?そうでない場合は、タイプ注釈で:my_interface<T>を使用するのではなく、type_Aとtype_Bで興味のあるタイプを記入してください。気にしない場合は、anyを再度使用できます。

タイプ情報が使用されるまで提供しないようにしますか?おそらく型Aと型Bはある種のコレクションであり、初期化された型を後の関数呼び出しに持ち込むことを望みます。あなたにもこれを達成することができますが、次のような機能を使用する必要があります:

interface ExampleModule { 
    Class_A: <T> (param: T) => my_interface<T> 
} 

またはコンストラクタなど:

interface ExampleModule { 
    Class_A: { new<T>(): my_interface<T> }; 
} 

して、生成されたオブジェクトを使用します。

+0

コンストラクタインターフェイスは、私が探していたものです。ありがとう! – Jthorpe

関連する問題