鑑於我怎樣才能聲明一個參數是類型而不是Typescipt類型的實例?
Class X{
}
我想通過類作爲參數,如:
someMethod(theType: ?X?){
theType.staticMethod //or
new theType();
}
是構建簽名(接口),我唯一的選擇嗎?
我大概可以使用構造簽名,但感覺不自然,構造簽名似乎並不能傳達可以新增的特定類型。我可能會錯過我想的一些細節。下面是一個更詳細的例子,但是泛型不是運行時類型。
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,你爲什麼要說newType? – Mick