Javascript 打字稿3.5.1“;“不兼容类型”;旧代码中的错误?
我有一些像这样的旧代码Javascript 打字稿3.5.1“;“不兼容类型”;旧代码中的错误?,javascript,typescript,Javascript,Typescript,我有一些像这样的旧代码 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的这个错误 属性类型stop不兼容。类型编号不正确 可分配给类型{
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
的这个错误
属性类型stop
不兼容。类型编号
不正确
可分配给类型{(队列:字符串,clearQueue?:布尔,
jumpToEnd?:布尔):JQuery;(clearQueue?:布尔,
jumpToEnd?:布尔):JQuery;}
显然,(错误地)推断{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;
如果它是泛型对象,为什么要用类型
Foo
声明它?我看不清Foo
的用途。我得到string | JQuery
,但是object
?更改键名而不是stop
,然后重试。因为可能有一些stop()
函数在JQuery
对象的内部具有相同的名称。@T.J.Crowder请参见我的编辑。拉梅什:是的,这就是正在发生的事情,但更改键名对我来说不是一个选项代码>可能显式强制转换它可以消除错误?