Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 打字稿3.5.1“;“不兼容类型”;旧代码中的错误?_Javascript_Typescript - Fatal编程技术网

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请参见我的编辑。拉梅什:是的,这就是正在发生的事情,但更改键名对我来说不是一个选项可能显式强制转换它可以消除错误?