2017-02-08 6 views
0

私はこれが不可能だと考え始めています。私はTの型を追跡したい汎用的な抽象基底クラスを持っています。私がこれを達成するために見つけた唯一の方法は、基底クラスにパラメータを持ち、スーパーコンストラクタでジェネリック型を再宣言することです。抽象クラスのジェネリック型を取得するにはどうすればよいですか?

abstract class Base<T> { 
    genericType: any; 

    constructor(genType: any) { 
    this.genericType = genType; 
    } 
} 

class Concrete extends Base<String> { 
    constructor() { 
    super(String); 
    } 
} 

let obj = new Concrete(); 
document.write(obj.genericType); 

私が望んでいたことは、単純に私のベースクラスでこれに沿って何かがあることです。

genericType: any = T; 
+0

ジェネリック制約が唯一のコンパイル時に存在し、実行時にあなたが 'T'を参照することはできませんので、Javascriptを、ジェネリック医薬品の概念がありません。あなたは正確に何をしたいですか? –

+0

これは、関数の引数として、コード内の他の部分でジェネリックコンストラクタのプロトタイプを使用するためです。 – onetwothree

+1

これをもっと明確にしているわけではありません。あなたの質問を追加して、あなたが直面している問題と達成しようとしていることについて何かを精緻にしてください。実行時に 'T 'を使うことはできませんが、あなたのシナリオを説明すれば、他の解決策が得られるかもしれません。 –

答えて

1

super(String)を呼び出すと、実際にStringクラスのコンストラクタ関数が渡されます。

あなたはこの方法であなたの基本クラスを書き換えることができます。

abstract class Base<T> { 
    genericTypeConstructor: {new(): T}; 

    constructor(genType: {new(): T}) { 
     this.genericTypeConstructor = genType; 
    } 
} 
関連する問題