解决失去对 self 类型约束的支持的问题

2023-11-27

这是我在旧版本的 TypeScript 中一直在做的事情,并且我在 C# 中使用此方法,但它在最新的 1.0 版本的 TypeScript 中不起作用。

这是过去有效的方法:

class Base<T extends Base<T>> {
    public children : Array<T>;

    doAction() {
        this.children[0].promise(); // used to work
    }

    promise() : T {
        return this; // used to work
    }
}

class Child extends Base<Child> {
    public myString: string;
}

new Child().promise().myString; // used to work

过去一切都很和谐。

现在在 TypeScript 1.0 中我收到此错误Base<T extends Base<T>>定义:

类型参数的约束不能引用同一类型参数列表中的任何类型参数。

如何修复此示例类以使其正常工作,而不需要类之外的任何强制转换或将任何内容强制转换为“任何”?也许这种模式应该改变?


您不再被允许使用T here:

class Base<T extends Base<T>>
--------------------------^

您要么必须使您的课程成为非通用课程,要么使用:

class Base<T extends Base<any>>

这样做的原因是为了让编译器更简单:

在我们不断努力简化语言的过程中,我们正在简化通用约束可能需要的内容。

类型检查、错误报告和设计复杂性方面增加的开销并没有增加足够的额外表达能力,因此 1.0 值得这样做。我们可能会在 TypeScript 的未来版本中重新审视这一点。

-- 重大变更维基

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

解决失去对 self 类型约束的支持的问题 的相关文章

随机推荐

  • 替换Python中字符串的一部分?

    我使用正则表达式从网页获取字符串 部分字符串可能包含我想用其他内容替换的内容 怎么可能做到这一点 我的代码是这样的 例如 stuff Big and small if stuff find and 1 make stuff Big smal
  • 主题:忙等待 - 空 While 循环 [重复]

    这个问题在这里已经有答案了 在大学的课程中 我们了解到Threads并使用 忙等待 方法作为示例Car等待在一个TrafficLight 对于此任务 我们构建三个类 TrafficLight implements Runnable Car
  • 如何在一个会话中发送多封电子邮件?

    我想要向不同的收件人发送数千封不同的电子邮件 并且想要打开与我的 SMTP 的连接并保留它 我希望这比重新打开 ervy 邮件的连接更快 我想使用 Apache Commons Email 但如果需要的话可以回退到 Java Mail AP
  • python-vlc 不会启动播放器

    好的 开始吧 我正在尝试播放在线视频 我得到了网址 如下所示 http fsi stanford edu sites default files video 4 mp4它不是我将在我的应用程序中使用的东西 但它只是一个示例文件 阅读 pyt
  • 使用自定义签名定义保存 TF2 keras 模型

    我有一个 Keras 顺序 模型 可以使用 Tensorflow 1 13 中的自定义签名定义进行保存 如下所示 from tensorflow saved model utils import build tensor info from
  • 在 Windows 上安装用于 ruby​​ 的 ncurses

    我正在尝试在 Windows 上为 ruby 安装 ncurses 我之前没有在我的机器上安装过 ncurses 我认为拥有 红宝石开发套件 它要求就足够了 但现在我被要求指定选项 我不知道该选择哪些选项 或者我是否需要执行 安装其他操作才
  • Swift 3 以编程方式创建 UILabel 并添加 NSLayoutConstraints

    您好 我正在尝试以编程方式创建一个标签并添加 NSLayoutConstraints 以便无论屏幕大小和方向等如何 它都位于超级视图的中心 我已经看过 但只是找不到可以遵循的示例 这是我所拥有的 let codedLabel UILabel
  • 如何根据数字范围过滤数组?

    我有一个用这个函数过滤的数组 function filter arr criteria return arr filter function obj return Object keys criteria every function c
  • Android:如何将带有空格的 URL 字符串解析为 URI 对象?

    我有一个表示包含空格的 URL 的字符串 并希望将其转换为 URI 对象 如果我只是尝试通过创建它 String myString http myhost com media File Name that has spaces inside
  • Codeigniter 中的路由 - 404 页面未找到

    有人能告诉我 问题出在哪里吗 这是我的控制器 class Support extends CI Controller public function construct parent construct this gt load gt mo
  • 当向量增长时如何强制移动语义?

    我有一个std vector某个类的对象A 该类非常重要并且具有复制构造函数and移动定义的构造函数 std vector a myvec 如果我用以下内容填充向量A对象 例如使用myvec push back a 使用复制构造函数 向量的
  • 如何从 jQuery 触发模拟点击 ng Click

    如何有一个像这样的链接 a href Some text a 我想调用ngClick来自 jQuery 的操作 a click 但它不起作用 someAction 没有被调用 也没有起作用 a trigger click 是否可以调用som
  • 通过 Web Audio API 播放分块音频时断断续续/听不清

    我在上一篇文章中提出了这一点 但由于它与原始问题无关 所以我将其单独发布 我无法通过网络音频播放传输的音频 就像在媒体播放器中播放一样 我尝试了两种不同的传输协议 binaryjs 和 socketio 但在尝试通过网络音频播放时都没有什么
  • Angular 和 Ionic、HTTP Get 在真实设备 IOS 中不起作用

    我的应用程序出现问题 当我在本地主机中运行该应用程序时 它工作正常 我可以看到频道列表 但当我尝试通过物理设备测试该应用程序时 它没有显示任何内容 我认为问题出在我用来通过http发送json数据的方法上 function use stri
  • 您建议使用哪种 Python 方式来检查 whois 数据库记录?

    我正在尝试启动并运行一个实际上需要检查 whois 数据库的网络服务 我现在正在做的事情很丑陋 我想尽可能避免它 我调用 gwhois 命令并解析它的输出 丑陋的 我做了一些搜索 试图找到一种Python式的方法来完成这项任务 一般来说我什
  • 位域的 GCC 实现中的一个错误

    在 C11 中工作 以下结构 struct S unsigned a 4 Bool b 1 被 GCC 列为unsigned 4 个字节 其中使用了 4 位 后面跟着一个 Bool 4 个字节 其中使用 1 位 总大小为 8 个字节 请注意
  • IPTC .NET 读/写 C# 库

    我正在寻找一些库来从 Jpg 文件读取 写入 IPTC 元数据 开源还是付费 并不重要 它应该与 NET 3 5 和 c 一起使用 有人知道这样的图书馆吗 我用谷歌搜索但没有找到任何东西 http msdn microsoft com en
  • 在 Google Apps 脚本上运行 WebAssembly

    我正在尝试在新的 V8 Google Apps 脚本运行时上运行 WebAssembly 它似乎受支持 但异步函数似乎在返回 Promise 后终止 let wasm new Uint8Array snip buffer function
  • Spring Security 的基本身份验证重定向到 /error 以获取无效凭据

    我有一个使用基本身份验证与 Spring Security 一起运行的 Spring Boot 应用程序 当提供正确的基本身份验证凭据时 一切都很好 但是对于不正确的身份验证凭据 Spring 会提供一个HttpRequestMethodN
  • 解决失去对 self 类型约束的支持的问题

    这是我在旧版本的 TypeScript 中一直在做的事情 并且我在 C 中使用此方法 但它在最新的 1 0 版本的 TypeScript 中不起作用 这是过去有效的方法 class Base