javascript - 旧代码中的 Typescript 3.5.1 "incompatible types"错误?

标签 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 的错误.

Types of property stop are incompatible. Type number 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/

相关文章:

javascript - ES6的reduce方法没有返回期望的输出

javascript - Angular2 : How to access DOM-Element (inside Component) from index. html 与 Javascript

javascript - instafeed.js 停止工作 : The access_token provided is invalid

javascript - && 表示 : AND, ||表示或

javascript - 这是什么错误 ERROR Cannot prepare tests due to an error.类型错误 : Cannot read property 'Date' of undefined?

TypeScript 提供(未指定的)泛型类型作为泛型参数

javascript - 在 Javascript/Typescript 中从 1D 数组创建 3D 数组

javascript - 将事件从子组件传递到父组件 Angular 5

javascript - 无法使用 GET 方法获取个人资料页面?

javascript - 鼠标点击触发鼠标离开