Jquery 和 Typescript [ts] 类型为 'string | number | string[]' 的参数不能分配给类型为"string"的参数。



我有一个大型现有项目,该项目正在转换为打字稿,最终将被重构然后放入角度。当前的项目中有很多jQuery。我在项目中实现了当前的@Types。

问题是该行

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

由于类型定义,正在创建错误。我得到类型'字符串的[ts]参数|数字|字符串[]''无法分配到类型'String'的参数。因为索引定义为"(方法)array.indexof(searchElement:string,fromIndex?:number):number":number"和jquery's .val定义为" jquery.val():string | number | number | string []( 1)( 1)超载)"。

我需要一种覆盖.val定义的方法,以使我可以将其编译为编译,对于这样的行而无需整个项目而无需覆盖。我在项目中有很多这样的行,所以我还不能重写每个人。最终,我们将完全摆脱jQuery。如果有人可以将我指向正确的方向。

我终于弄清楚了如何使它起作用。我能够将类型的字符串投射到它。由于我在项目中有几个地方的几个地方,所以我创建了一个这样的变量:

let optSel: string = <string>$('option:selected', this).val();
if ($(["Priority", "PM"]).index(optSel) >= 0) {

这使我能够确保.val类型是符合array的索引要求的字符串。

您的当前方法是一个有效的解决方案,但这需要您将$('option:selected').val()的所有出现都投入到string的预期类型中。您可能要考虑的事情是利用环境声明,其中您覆盖/扩展到@types/jquery中的JqueryStatic接口。

interface JQueryStatic {
    (opts: 'option:selected', ...args): {
        val: () => string;
    };
}

每当调用$('option:selected', ...)时,此调用的定义将坚持返回的对象包含返回字符串值的val方法。

let value: string = $('option:selected').val();

如果您在多个文件中整个项目中都使用它,则可以为其创建一个声明文件(*d.ts),否则我建议我只在当前文件的顶部添加环境类型声明。<<<<<<<<<<<<

最新更新