Im typescipt 2を使用しています。 Imは、サーバからモデルを受け取り、使用できるインスタンスに変換するパーサメソッドを記述しています。Typescript(Angular2)ジェネリックコンストラクタファクトリ
コード:
export interface Constructable {
copy(other : any) : void;
}
//in my Convert class which converts server responses to model
private static _parseT<T extends Constructable>(obj : any) : T {
let instance = Object.create(T); // the row of the compile-time error
instance.constructor.apply(instance);
instance.copy(obj);
return instance;
}
と私は、コンパイル時エラー
を見つけることができませんでし持っている以下のクラスは名前T
export class Foo implements Constructable {
private test : string = null;
public copy(other:any) : void {
this.test = other.test;
}
}
を持っていると仮定することができます
今、確かにその構文ではないが、私は方法を見つけることができませんでした。
物をクリアする。これはuseageがどのように見えるかです:
public static ParseFoo(data: any) : Foo{
return Convert._parseT<Foo>(data.mResult); // data is a server response object
}
NOTE
いくつかの工場出荷時のパターンは、これを解決するだろうが、私は本当にインスタンスを作成し、返す代わりに、いくつかのGenerate
のCopy
方法に滞在したいと思います
そのsynatictically間違っています。 clazz:new(... args:any []):Tが間違っています。 これをclazz:new(... args:any [])=> Tに変換しようとしたところ、コンパイルエラーも発生しました。 –
ああ、このオススメを修正して申し訳ありませんが、 (コピーした例をチェックしてください。) – Supamiu
プロパティ 'コピー'がタイプ 'new(... args:any [])=> T'に存在しません。 タイプ 'new引数:任意の[])=> Tは、」私はあなたが達成したいものを知らなくても、実装を作成したので、私が正しい、あなたがオブジェクトからインスタンスを作成したい場合はああ、それは、だT –