升级 TypeScript 后,Angular 控制器注册现在无法编译

2024-06-22

我们使用的是 TypeScript 2.2。升级到 2.4 后,我们现在可以在编译时得到:

错误 TS2345:“typeof TopMenuController”类型的参数不可分配给“Injectable”类型的参数。 类型“typeof TopMenuController”不可分配给类型“(string | (new (...args: any[]) => IController) | ((...args: any[]) => void | IController))[ ]'。 类型“typeof TopMenuController”中缺少属性“push”。

ts\controllers\TopMenuController.ts(2,18):错误 TS2559:类型“TopMenuController”与类型“IController”没有共同的属性。

我不明白第一个错误,谷歌搜索它很困难。我只是请求有关第一个错误的帮助。 (由于我尝试解决第一个错误,我收到了第二个错误)。这是控制器:

export class TopMenuController implements angular.IController {
    static $inject = ["$templateCache", "Restangular"];

    constructor(
        private readonly $templateCache: angular.ITemplateCacheService,
        private readonly restangular: Restangular.IElement) {
    }
}
    

这就是它的注册方式。

angular.module("ngApp")
    .config(Configuration.TemplateCacheConfigurator)
    .controller("topMenuController", Controllers.TopMenuController)

如何修改我的控制器定义或其注册以便我们的代码再次编译?

(删除implements angular.IController位消除了第二个错误,但第一个错误仍然存​​在)

Edit:我发现this bug https://github.com/Microsoft/TypeScript/issues/16536


由于所有的属性IController是可选的,我相信您看到的错误是 TypeScript 2.4 中新检查“弱类型”的结果。查看此链接来自微软 https://blogs.msdn.microsoft.com/typescript/2017/06/12/announcing-typescript-2-4-rc/了解详情。另请检查这个相关的 Github 问题 https://github.com/ceolter/ag-grid/issues/1708.

微软的一些相关引用:

在 TypeScript 2.4 中,我们为我们所说的弱项添加了类似的检查 类型。任何仅包含可选属性的类型都被视为 弱类型,因为它对可以分配的内容几乎没有限制 到它。

...

在 TypeScript 2.4 中,将任何内容分配给弱类型现在都是错误的 当属性没有重叠时。

...

你可以将其视为 TypeScript “强化”弱者 这些类型的保证可以捕获本来会保持沉默的内容 错误。

由于这是一个重大更改,您可能需要了解 与严格对象字面量相同的解决方法 检查:

  1. 如果属性确实存在,则声明它们。
  2. 向弱类型添加索引签名(即 [propName: string]: {})。
  3. 使用类型断言(即 opts 作为选项)。

Edit:基于此信息,一个简单的解决方案是实现中定义的方法之一IController。例如,正如 @Amy 在评论中提到的,您可以定义一个空的$onInit控制器中的方法。

Edit:为了完整起见,以下是完整代码:

export class TopMenuController implements angular.IController {
  static $inject = ["$templateCache", "Restangular"];

  $onInit() { }

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

升级 TypeScript 后,Angular 控制器注册现在无法编译 的相关文章

随机推荐

  • GSSException:消息流已修改 (41)

    我正在森林架构中使用 LDAP 所有服务器和我的服务器都是 Windows 我使用 NTLM 身份验证绑定到 AD 我有一个针对 LDAP 服务器执行操作的 Java 代码 该代码被包装为 tomcat servlet 直接运行 Java
  • Android 广告性能非常慢

    我一直在我的 Android 应用程序上尝试横幅广告 如下this https developers google com admob android quick start指导 当广告加载并呈现时 观察到 FPS 显着下降 这对于用户来说
  • 在 IntelliJ IDEA 中调试 android jni 代码

    我如何在idea中调试我的android应用程序的jni代码 我已经使用 ndk build 和标志 NDK DEBUG 1 构建了 jni 代码 但这没有帮助 想法没有落入我在 C 代码中的断点 我还尝试使用默认参数创建 远程 调试并运行
  • 如何防止在 JavaScript 中使用退格键向后导航?

    这在 IE 中有效 但我无法让它在 Opera 或 Firefox 中工作 当且仅当当前焦点是 SELECT 下拉列表时 我想防止 Backspace 导航离开
  • Git 自动检测系统代理设置

    我经常更换具有不同代理设置的地方 或者只是从 WiFi 更改为使用不同代理的电缆连接 由于我使用的是 OsX 因此可以轻松地从一种网络配置切换到另一种网络配置 但 git 有自己的设置 gitconfig文件 我厌倦了每次修改该文件 有没有
  • 如何让div在页面底部展开时自动滚动?

    最近我陷入了死胡同 我正在尝试扩展页脚 footernotes 这很有效 它基本上是正文后面的一个 div 使用 z index 完成 当您单击按钮时 它会向下移动 滚动条也随之而来 这意味着页面现在更长了 但我想做的是让视口随着扩展的 d
  • 使用 AJAX 从数据库自动填充表单输入字段

    无法让它工作 可以使用额外的一双眼睛来发现我做错了什么或可能缺少什么 我使用 Joomla 3 3 1 的 RSForm Pro 组件创建了一个表单 该表格的目的是允许用户对我们的产品提出保修索赔 如果用户需要对产品提交重复索赔 则会显示一
  • 带有辅助 y 轴的 Pandas 条形图:隐藏图下方的网格线

    我正在绘制 pandas 中描述的一些数据文档 https pandas pydata org pandas docs stable user guide visualization html plotting on a secondary
  • ASP.NET 5 beta 8 中的 Windows 身份验证支持

    我有一个 ASP NET 5 MVC 6 Web API 项目 大多数 API 端点都具有 Authorize 属性 并且在 IIS 和 Visual Studio 中的项目属性中启用了 Windows 身份验证 这一切在 beta 7 中
  • 从非 git 文件夹添加/提交到裸存储库

    我正在尝试破解 git 来为我做备份 数据相对来说太大了 我无法在我的任何硬盘上提供工作副本和 git 存储库 因此 我需要从非 git 文件夹中 git add commit 到裸存储库 硬盘 1 工作副本 非 git 硬盘 2 裸 gi
  • 哪个最小的 Spring Boot 2.x 版本可以在 Java 17 上运行?

    Spring Boot 3 0 至少需要 Java 17 吗 哪个最小的 Spring 2 x 版本可以在 Java 17 上运行 Java 17 于 2021 年 9 月 14 日发布https endoflife date java h
  • GCP 多久更新一次 GCP 控制台上显示的帐单费用?是实时的吗?

    Google 云平台多久更新一次 刷新 GCP 控制台上显示的账单费用 是有固定的延迟还是实时的 计费费用每日更新 发票每月生成 还可以通过编程方式按需检查使用情况 按照说明进行操作 gt https cloudplatform googl
  • 如何使用 NSURLConnection 上传文件和其他参数

    我在用NSURLConnection发送相同的数据 NSString 到服务器 我想向它们添加图像或文件 那么内容类型的值是多少 Encoding NSData encodingData NSMutableDictionary dictio
  • 将图的 BFS 代码转换为 DFS 代码

    如果这个问题听起来模棱两可 我很抱歉 但我在采访中被问到了这个问题 为图 树中的 BFS 编写一个程序 我使用队列编写了流行的代码 现在他要求我通过修改我刚刚编写的 BFS 代码的一行来将其转换为 DFS 代码 我能想到的唯一答案是使用堆栈
  • 逐渐斜体?

    有没有办法逐渐从普通文本过渡到斜体 并稍微改变每个字符的倾斜角度 罗宾的想法确实有效 DEMO http dabblet com gist 3395805 但是那个小提琴有很多问题 我不确定我是否可以将它们放入一条评论中 首先 span i
  • R/Shiny/Leaflet 中的多点选择

    我有一张在 R Shiny 应用程序中使用 Leaflet 生成的地图 并且能够使用如下代码监听地图上点上的事件点击 observeEvent input map marker click p input map marker click
  • Wireshark 本地主机流量捕获[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我用 C 语言编写了一个在本地主机上运行的简单服务器应用程序 如何使用 Wireshark 捕获本地主机流量 如果您使用的是 Wind
  • process.text 的错误等效项?

    可以获得整个输出流 http groovy codehaus org Process Management通过使用 text def process ls l execute println Found text process text
  • 在 Go 中调用外部命令

    如何在GO中调用外部命令 我需要调用外部程序并等待它完成执行 在执行下一条语句之前 您需要使用执行包 http golang org pkg os exec 使用启动命令Command http golang org pkg os exec
  • 升级 TypeScript 后,Angular 控制器注册现在无法编译

    我们使用的是 TypeScript 2 2 升级到 2 4 后 我们现在可以在编译时得到 错误 TS2345 typeof TopMenuController 类型的参数不可分配给 Injectable 类型的参数 类型 typeof To