someMethod(theType: ?X?){
theType.staticMethod //or
new theType();
}
は、ここに署名(インタフェースに)私の唯一のオプションを構築していますか?
私はおそらく構文シグネチャを使用することができますが、それは不自然な感じがあり、構文シグネチャは実際にnewすることができる特定のタイプを伝えていないようです。私が考えている細部を見逃しているかもしれません。より詳細な例がありますが、実行時の型ではないジェネリックがあります。
abstract class GreeterBase<T extends GreeterBase<T>>{
message:string;
constructor(message:string){
this.message=message;
}
public static create<T>(message:string):T{
//This is the only part that doesn't work.
return new T(message); //This doesn't work.
}
public abstract greet():string;
public logMessage(){
console.log(this.message);
}
}
class EnglishGreeter extends GreeterBase<EnglishGreeter>{
constructor(message: string) {
super(message);
}
greet() {
return "Hello, " + this.message;
}
}
class FriendlyMessager<T extends GreeterBase<T>>{
private _myGreeter:T;
constructor(andSoForth:string){
this._myGreeter = GreeterBase.create<T>(andSoForth);
this._myGreeter.logMessage();
}
public sendGreeting(){
this._myGreeter.greet();
}
}
let messager = new FriendlyMessager<EnglishGreeter>(', how are you');
messager.sendGreeting();
TS遊び場Link
あなたの目標は何かわからない。あなたの質問を指定してもよろしいですか?あなたが新しいXを持っているなら、あなたはなぜ新しいtheTypeを言うのですか? – Mick