旧代码中的Typescript 3.5.1“不兼容类型”错误?

时间:2019-06-07 06:54:37

标签: 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...

使用打字稿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;
  }

1 个答案:

答案 0 :(得分:2)

是的,看起来JQuery类型已经定义了stop,它不是数字。最简单的解决方案是显式地告诉您您的值是一个简单的对象。

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