演示相关行为的示例代码:
export class NodePool {
private tail: Node;
private nodeClass: Function;
private cacheTail: Node;
constructor(nodeClass: Function) {
this.nodeClass = nodeClass;
}
get(): Node {
if (this.tail) {
var node = this.tail;
this.tail = this.tail.previous;
node.previous = null;
return node;
} else {
return new this.nodeClass();
}
}
}
示例的第17行(返回新的......)导致编译器抱怨:
“功能”类型的值不可用。
将任意类的构造函数存储在变量中的正确方法是什么,以便稍后可以实例化它。
答案 0 :(得分:7)
您可以使用类型文字指定可以新建的对象。这也具有增加类型安全性的优点:
export class NodePool {
private tail: Node;
private cacheTail: Node;
constructor(private nodeClass: { new(): Node; }) {
}
get(): Node {
if (this.tail) {
var node = this.tail;
this.tail = this.tail.previous;
node.previous = null;
return node;
} else {
return new this.nodeClass();
}
}
}
class MyNode implements Node {
next: MyNode;
previous: MyNode;
}
class NotANode {
count: number;
}
var p1 = new NodePool(MyNode); // OK
var p2 = new NodePool(NotANode); // Not OK