多重继承解决方法

2024-06-25

我试图发现一种将多个接口组合成一个抽象类的模式。目前我可以通过组合多个接口implements,但接口不能声明构造函数。当我必须引入构造函数时,我被迫使用抽象类。当我使用抽象类时,我必须重新声明整个复合接口!我肯定错过了什么吗?

interface ILayerInfo {
    a: string;
}

interface ILayerStatic {
    b(): string;
}

class Layer implements ILayerInfo, ILayerStatic {
    constructor(info: ILayerInfo);
    a: string;
    b(): string;
}

ANSWER: Use new:

interface Layer extends ILayerInfo, ILayerStatic {
    new(info: ILayerInfo);
}

// usage: new Layer({ a: "" });

在与实例成员相同的接口上声明构造函数并没有多大意义——如果您要动态传递类型以在构造函数中使用,则类的静态部分将受到限制。你想要做的可能是这样的:

interface Colorable {
    colorize(c: string): void;
}

interface Countable {
    count: number;
}

interface ColorCountable extends Colorable, Countable {
}

interface ColorCountableCreator {
    new(info: {color: string; count: number}): ColorCountable;
}

class ColorCounted implements ColorCountable {
    count: number;
    colorize(s: string) { }
    constructor(info: {color: string; count: number}) {
        // ...
    }
}

function makeThings(c: ColorCountableCreator) {
    var results: ColorCountable[];
    for(var i = 0; i < 10; i++) {
        results.push(new c({color: 'blue', count: i}));
    }
    return results;
}

var items = makeThings(ColorCounted);
console.log(items[0].count);

也可以看看带有构造签名的打字稿接口如何工作? https://stackoverflow.com/questions/13407036/how-does-typescript-interfaces-with-construct-signatures-work

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多重继承解决方法 的相关文章

随机推荐

  • 模板语言与直接 PHP

    我要编写一个 CMS 但现在我正在写下我所有的想法 并试图在开始之前理清我的所有概念 我纠结的一件事是是否使用模板语言并解析网站页面 并用内容项替换模板标签 或者只是使用直接 PHP 开发网站并让 CMS 生成有帮助的数据结构 例如 nav
  • C++ POD 类型不能有构造函数吗?

    我有一个类和一个 const 变量 struct A int b A const a 班上A是POD 可以这样初始化 A const a 3 恕我直言 拥有这样的构造函数看起来不错 struct A int b A int newB b n
  • stbir_resize_uint8 内存访问崩溃

    我正在使用 stb image 将图像上传到 GPU 如果我只是使用 stbi load 上传图像 我可以确认 nvidia Nsight 该图像已正确存储在 GPU 内存中 不过 我喜欢在将某些图像上传到 GPU 之前调整其大小 在这种情
  • 删除c#中datagrid中的空白灰色空间

    替代文本 http www freeimagehosting net uploads 260c1f6706 jpg http www freeimagehosting net uploads 260c1f6706 jpg 我如何删除空白空间
  • libtorrent-rasterbar 无法使用磁力链接下载元数据

    我正在尝试使用 libtorrent rasterbar 0 16 13 的无 DHT 仅跟踪器行为来下载远程元数据文件 torrent 不幸的是 我收到了很多peer disconnected 错误 从我的程序中播种并通过 BT 或 QB
  • 如何从有条件的列中获取最新值

    我在 Excel 中有一个表 其中包含以下列 Date 人名 金额 英镑 该表用于记录人们何时付钱给我 通常 我可以让不止一个人在同一天向我付款 而且 随着时间的推移 同一个人会在很多天向我付款 记录添加到表格底部 以便按日期排序 但不再按
  • 尝试使用作为 ObjectType key 的变量设置对象属性时,类型“any”不可分配给类型“never”

    在下面的代码中 typscript 编译器在更新方法中显示错误 指出 any 不能分配给类型 never 我注意到当类型包含与其他类型混合的布尔值时 keyof 类型不起作用 如何使其编译时在类型中具有混合类型值 type ConfigSt
  • 解决 C++ 中的 Project Euler 问题的最佳 bignum 库? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我还是一名学生 我发现欧拉项目非常有趣 有时 问题需要比原始类型更大的计算 我知道你可以实现 但我懒得
  • VBA 中的 Excel 下拉列表:“无法获取工作表类的 DropDowns 属性”

    我有这个代码 Sub addDropdown Name ActiveSheet DropDowns Add 74 25 60 188 25 87 75 Select Set n ActiveSheet DropDowns Name If N
  • Fabric 2.3 并行执行sudo命令

    我正在尝试使用 Fabric 2 3 在某些服务器上运行一些需要 sudo 的任务 我的主要目标是并行化操作 所以我想到使用ThreadingGroupFabric api 类 但它不支持sudo 为了清楚起见 下面是我的代码 usr bi
  • 返回 JSON 或部分 html 的 ASP.NET MVC 控制器操作

    我正在尝试创建控制器操作 该操作将根据参数返回 JSON 或部分 html 将结果异步返回到 MVC 页面的最佳方法是什么 在您的操作方法中 返回 Json object 以将 JSON 返回到您的页面 public ActionResul
  • JDBC 插入错误

    我正在尝试使用 jdbc 将一些数据插入到我的数据库中 我使用了正确的表 数据库名称和参数 一切都经过检查 Code public static void main String args throws IOException ClassN
  • NLTK:为什么 nltk 无法识别 stanford-ner 的 CLASSPATH 变量?

    这是我的代码 from nltk tag import StanfordNERTagger st StanfordNERTagger english all 3class distsim crf ser gz 我得到 NLTK was un
  • 在链配置的命名空间中找不到类“App\Entity\Users”

    我想使用 Symfony 4 添加身份验证系统 我正在使用 Mssql 数据库 该数据库已创建并填充 这不是第一次 我正在使用它 但这是我第一次遇到问题 我从数据库导入了所有实体 尤其是Users Entity 我也配置了LoginForm
  • 如何在 R tidyverse 中转换列类型

    我试图熟悉 Tidyverse 的使用 但数据类型转换被证明是一个障碍 我知道自动将字符串转换为因子并不理想 但有时我想使用因子 因此一些可以轻松地将 tibble 中所需的字符列转换为因子的方法将非常好 我更喜欢使用 readxl 包读取
  • Swift 中以 Equatable 和 Printable 作为参数的通用函数和属性

    如何编写一个允许任何对象但必须是的函数Printable and EquatableSwift 中的对象数组 class func withItems items AnyObject 我需要的物品是Printable and Equatab
  • 在 python 中使用正则表达式返回唯一匹配

    生成正则表达式的所有唯一匹配项的最有效 或最 Pythonic 方法是什么 现在我刚刚申请set 使用后findall 但我不确定是否有更好的方法 查找所有匹配项的其他方法 使用其他方式通过正则表达式在文本中搜索 您可以与一路上获得的匹配项
  • 如何将 Thread.currentThread() 与保存的 Thread 引用进行比较? ==,等于,..? [复制]

    这个问题在这里已经有答案了 我正在编写一个类 它将来自其他方法的操作排队到 ConcurrentLinkedQueue 中 然后有一个 process 方法 该方法只能从处理队列的创建线程中调用 这是因为其他方法的操作可以从其他线程调用 但
  • 尽管 EXPORT_SYMBOL 模块插入时出现“模块中的未知符号”

    我正在尝试编译并插入 r8169 realtek 以太网驱动程序 我的内核版本是 ebin sony uname r 4 2 0 rc3 custom 我的本地磁盘中有相同的完整源代码 用于安装当前的内核 当我运行时该模块编译成功make
  • 多重继承解决方法

    我试图发现一种将多个接口组合成一个抽象类的模式 目前我可以通过组合多个接口implements 但接口不能声明构造函数 当我必须引入构造函数时 我被迫使用抽象类 当我使用抽象类时 我必须重新声明整个复合接口 我肯定错过了什么吗 interf