我正在尝试 Typescript 中的一些语言结构。我希望创建一个类数组,稍后将实例化这些类。
如果我在上面尝试的话,我的代码似乎可以编译并且可以工作打字稿游乐场但它确实在打字稿框中给出了错误:Argument of type 'typeof Greeter' is not assignable to parameter of type 'BaseGreeter'.
我猜这是因为数组定义需要扩展 BaseGreeter 的类的实例,而不是扩展它的类本身。那是对的吗?如果是这种情况,如何定义扩展 BaseGreeter 的类数组?
这是代码:
class BaseGreeter {
greeting: string;
greeting_start: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return this.greeting_start + ", " + this.greeting;
}
}
class Greeter extends BaseGreeter{
constructor(message: string) {
super(message);
this.greeting_start = "Hello";
}
}
class Greeter2 extends BaseGreeter {
constructor(message: string) {
super(message);
this.greeting_start = "Bye";
}
}
class Greeter3 extends BaseGreeter {
constructor(message: string) {
super(message);
this.greeting_start = "Adieu";
}
}
function getGreeters() :[string, BaseGreeter[]]{
let greeters = new Array<BaseGreeter>();
greeters.push(Greeter);
greeters.push(Greeter2);
greeters.push(Greeter3);
return ["test", greeters];
}
let foo = {};
let retval = getGreeters();
alert(retval[0]);
foo['greeters'] = retval[1];
var i = 0;
let button = document.createElement('button');
button.textContent = "Say Hello";
button.onclick = function () {
let greeter = new foo['greeters'][i]("cruel world");
alert(greeter.greet());
i = i + 1;
}
document.body.appendChild(button);
BaseGreeter
类型意味着值符合BaseGreeter
接口并且是一个实例BaseGreeter
班级。指定的类型BaseGreeter
构造函数是typeof BaseGreeter
:
function getGreeters(): [string, typeof BaseGreeter[]]{
let greeters = new Array<typeof BaseGreeter>();
greeters.push(Greeter);
greeters.push(Greeter2);
greeters.push(Greeter3);
return ["test", greeters];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)