我有一些像这样的旧代码
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. Typenumber
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/