【发布时间】:2016-10-19 22:27:10
【问题描述】:
给定
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,为什么要说 new theType?