我有一个大型现有项目正在转换为 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/