Jquery 和 Typescript [ts] Argument of type 'string | number | string[]' is not assignable to parameter of type 'string' .

标签 jquery typescript types

我有一个大型现有项目正在转换为 typescript ,最终将被重构,然后放入 Angular。当前项目中有很多Jquery。我在项目中实现了当前的@types。

问题是这一行

if (["Priority", "PM"].indexOf($('option:selected', this).val()) >= 0) {

由于类型定义而产生错误。我得到 [TS] 'string | 类型的参数编号 | string[]' 不可分配给类型为“string”的参数。因为 indexOf 被定义为“(method) Array.indexOf(searchElement: string, fromIndex?: number): number”而 Jquery 的 .val 被定义为“JQuery.val(): string | number | string[] (+1重载)”。

我需要一种方法来覆盖 .val 定义,使其只是字符串,以便我可以编译它,对于这样的行,无需覆盖整个项目的 .val。我在项目中有很多这样的行,所以我还不能重写它们中的每一行。最终我们将完全摆脱 Jquery。如果有人能指出我正确的方向,那就太好了。

最佳答案

我终于想出了如何让它发挥作用。我能够将类型字符串转换为它。因为我在项目的几个地方都有那条确切的线,所以我创建了一个这样的变量:

let optSel: string = <string>$('option:selected', this).val();

if ($(["Priority", "PM"]).index(optSel) >= 0) {

这使我能够确保 .val 类型是一个字符串,它符合 Array.indexOf(searchElement: string) 的 indexOf 要求。希望这对某人有帮助。

关于Jquery 和 Typescript [ts] Argument of type 'string | number | string[]' is not assignable to parameter of type 'string' .,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46007618/

相关文章:

typescript - 创建实体实例导致 Reflect.getMetadata 不是函数

c++ - 在没有 RTTI 的情况下检查 std::any 的类型

jquery - jQuery 的 W3C 标记验证错误

jquery - 更改动画 Sprite 表时 HTML5 Canvas 挂起(逐帧视频播放)

jquery - 在带有图标 : no space between the icon and text? 的 Jquery 按钮中

javascript - 向下钻取(Highcharts)在 Angular 5 中不起作用

javascript - 呈现 View 后使用 aurelia 将数据动态添加到页面

javascript - 防止动态创建的 onclick 事件过早触发

java - 如果我将所有 "int"替换为 "long",可能会出现什么问题?

reactjs - 如何确定字符串是否是 Typescript 中的 keyof 接口(interface)?