如何在 Typescript 中定义类数组(而不是实例)

2023-11-20

我正在尝试 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(使用前将#替换为@)

如何在 Typescript 中定义类数组(而不是实例) 的相关文章

随机推荐

  • Paypal 按钮 - 添加变量以返回 URL

    我正在尝试向网站添加一个简单的 PayPal 按钮 我想要做的是将按钮设置为包含需要选择的 选项 这不是问题 我已创建按钮并显示选项选择框 我想要做的是返回到我自己的域上的 URL 但让 URL 包含付款前选择的下拉框中的选定选项 所以我从
  • 在控制器之间设置和检索对象的 Angular 服务

    我一直在尝试从 http post 响应设置一个服务对象到一个控制器并从另一个控制器获取它 我在 SO 或网站中看到的教程更多地侧重于将其从 HTML 输入获取到控制器 然后另一个控制器获取值 我想避免使用 rootscope 而且我是 a
  • 如何在64位Window下连接R与Access数据库?

    当我尝试将 R 与 Access 数据库连接时出现错误 odbcConnectAccess is only usable with 32 bit Windows 有谁知道如何解决这个问题 library RODBC mdbConnect l
  • OpenCVSharp:无法加载 DLL“OpenCvSharpExtern”

    我已经在我的项目中使用 NuGet 管理器安装了最新的 OpenCVSharp 2 2 4 10 201 有关 OpenCVSharp CvMat 的所有内容都工作正常 加载 操作等 因此我确信安装是正确的 但是我根本无法使用 OpenCV
  • iPhone 6 显示缩放功能扰乱了整个视图

    我在使用 iPhone 6 时遇到问题显示缩放功能 如 Xcode 6 1 1 模拟器没有显示缩放功能来测试 并且仅具有标准显示 Problem 当我在模拟器和 iPhone6 带标准显示 上运行代码时 它工作正常 但是当我在 iPhone
  • 如何减少新表单的“使用”样板?

    每次我向项目中添加新表单时 都会在使用条款中删除一大堆样板文件 uses Windows Messages SysUtils Variants Classes Graphics Controls Forms Dialogs 说真的 谁会定期
  • npm 在哪里安装包?

    有人可以告诉我在哪里可以找到我使用安装的 Node js 模块吗npm 全球图书馆 你可以运行npm list g查看安装了哪些全局库以及它们所在的位置 使用npm list g head 1对于仅显示路径的截断输出 如果您只想显示主包而不
  • p.classname 或 .classname p,有什么区别吗?

    所以 我对这个简单的事情有点困惑 我已经尽可能多地用谷歌搜索 但我只是不知道谷歌搜索的正确关键字 我尝试了 CSS 选择器等 没有答案足以消除我的困惑 所以我也测试过 p classname似乎不起作用 但根据我正在读的书中的定义 2012
  • 如何计算R中矩阵乘积的对角线

    我有两个矩阵A and B 那么最快的方法是什么just计算diag A B 即内积ith row of A and ith的列B and 不关心其他项的内积 补充 A and B分别具有较大的行数和列数 这可以在不进行完整矩阵乘法的情况下
  • WPF 中 MDI 的替代方案?

    希望这是一个合适的问题 我第一次使用 WPF 最终目标是将我们的程序从 winforms 应用程序转换为 WPF 应用程序 我们的应用程序当前使用 MDI 表单作为主表单 以允许打开多个窗口来显示数据等 在 WPF 中 显示多组数据的最佳实
  • pkill 通过远程 ssh 与另一个命令结合返回 255

    当我尝试在远程主机上结合另一个命令执行 pkill 时 它总是返回 255 即使这两个命令都成功 Examples ssh
  • 如何在 R 中创建显示预测模型、数据和残差的图表

    给定两个变量 x and y 我对变量运行动态回归 并希望根据其中一个变量绘制拟合模型 并在底部显示实际数据线与预测线的残差 以显示实际数据线的差异 我以前见过它 我以前也做过 但我一生都不记得如何做或找到任何解释它的东西 这让我陷入了困境
  • R doParallel 进度条来监控已完成的作业

    我正在尝试编写一个具有多线程功能的 CRAN 包 我得到了一个完美的解决方案doSNOW 但该软件包已被 CRAN 团队标记为 取代 他们要求我切换到doParallel解决方案 这很好 但是我找不到一种方法来监控使用完成的作业数量doPa
  • Rails ActiveStorage url_for 返回无效的 URL

    我有一个带有头像的员工模型 我可以将图像附加到头像 但每当我尝试显示图像时 url for employee avatar 产生死链接 我所看到的只是来自的价值alt来自标签的属性 我得到的图像标签如下 img src rails acti
  • 您可以在不使用相对路径的情况下从 css 引用图像吗?

    我想创建一个带有背景图像CSS的div mydiv background image url public images foo png background repeat repeat x 现在 我无法在 css 中使用路由 因此我必须使
  • 如何将“wchar_t *”转换为“const char *”

    我怎样才能转换 wchar t to const char 使用C MFC VS2010 谢谢 由于问题是关于MFC的 我建议如下 CStringA a Test CStringW w L Test a CStringA w w CStri
  • ClassLoader 不提供“addTransformer(ClassFileTransformer)”方法

    我正在使用 Spring 和 AspectJ 进行一些不错的编织 插入后我刚刚遇到了这个问题
  • 阻止或取消退出 JavaFX 2

    当退出 JavaFX 程序时 我将重写 Application stop 以检查未保存的更改 这工作正常 但最好为用户提供取消操作的选项 换句话说 Application stop 是最后机会沙龙 虽然它确实捕获了退出 但撤销退出过程有点晚
  • 无法从 ondatachange 方法获取值

    我目前正在开发一个android应用程序 我使用firebase作为数据库 但是当我在onDataChange方法中获取变量并将它们分配给全局变量时 我得到了空变量 但是当我在onDataChange方法中调用这些变量时 它们是不为空 pu
  • 如何在 Typescript 中定义类数组(而不是实例)

    我正在尝试 Typescript 中的一些语言结构 我希望创建一个类数组 稍后将实例化这些类 如果我在上面尝试的话 我的代码似乎可以编译并且可以工作打字稿游乐场但它确实在打字稿框中给出了错误 Argument of type typeof