jQuery和Typescript [ts]类型'string |的参数 编号 string []'不可分配给'string'类型的参数。

Dev*_*fic 4 jquery types typescript

我有一个现有的大型项目,该项目将转换为打字稿,并将最终进行重构,然后放入Angular。当前项目中包含很多Jquery。我在项目中实现了当前的@types。

问题是这条线

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

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

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

Dev*_*fic 7

我终于想出了使它工作的方法。我能够将类型字符串转换为它。由于我在项目中的几个地方都有那条确切的线,所以我创建了一个像这样的变量:

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

if ($(["Priority", "PM"]).index(optSel) >= 0) {
Run Code Online (Sandbox Code Playgroud)

这使我可以确保.val类型是一个与Array.indexOf(searchElement:string的indexOf要求匹配的字符串。希望对您有所帮助。

  • 听起来目前最好的方法是`let optSel: string = ($('option:selected', this).val() as string);` (2认同)