我有一些像这样的旧代码
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...
使用打字稿3.5.1时,我遇到了y
的错误。
属性
stop
的类型不兼容。类型number
不是 可分配给类型{ (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;
}
答案 0 :(得分:2)
是的,看起来JQuery类型已经定义了stop
,它不是数字。最简单的解决方案是显式地告诉您您的值是一个简单的对象。
let y: Foo = {stop: 33} as object;