gpt4 book ai didi

javascript - 旧代码中的 Typescript 3.5.1 "incompatible types"错误?

转载 作者:行者123 更新时间:2023-11-30 13:59:53 25 4
gpt4 key购买 nike

我有一些像这样的旧代码

import * as $ from "jquery";
type Foo = string | object | JQuery;

let x: Foo = { bar: 33}; // just a generic object
let y: Foo = { stop: 33}; // meant to a generic object, but...

使用 Typescript 3.5.1 我得到了 y 的错误.

Types of property stop are incompatible. Type number is not assignable to type { (queue: string, clearQueue?: boolean,
jumpToEnd?: boolean): JQuery<HTMLElement>; (clearQueue?: boolean,
jumpToEnd?: boolean): JQuery<HTMLElement>; }
.

显然它在(错误地)推断 {stop:33}应该是 JQuery

这是编译器错误吗?如果不是,如何避免这个问题?


解释为什么Foo是这样定义的...它用作函数的参数类型,允许将 Foo 转换为 XML 字符串,如下所示。根据 Foo 的类型,它被视为现有的 XML 字符串、DOM 节点或转换为 xml 的通用对象。

private paramToString(data: Foo): string {
let result = isJquery(data) ? new XMLSerializer().serializeToString(data[0]) :
(typeof data === "string" ? data : new XML2JS.Builder().buildObject(data));
return result;
}

最佳答案

是的,看起来 JQuery 类型定义了 stop 而不是数字。最简单的解决方案是明确告知您的值是一个简单的对象。

let y: Foo = {stop: 33} as object;

关于javascript - 旧代码中的 Typescript 3.5.1 "incompatible types"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56489331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com