错误的类型参数分配错误

Error for wrong type parameter assignment

在我的部分代码中,我遇到了一个我无法解决的打字稿错误。作为测试,我对一个值进行了本地赋值,以查看如何修复它:

const t = ... // where t's type is: d3.Transition<SVGElement, ParseTreeHierarchyNode, SVGElement, IParseTreeRenderNode>
const tt: d3.Transition<Element, any, any, any> = t;

问题出在第一个类型参数上。 SVGElement extends Element 所以它们应该是赋值兼容的。但是我收到此错误:

Type 'Transition<SVGElement, ParseTreeHierarchyNode, SVGElement, IParseTreeRenderNode>' is not assignable to type 'Transition<Element, any, any, any>'.
  The types returned by 'selection().datum(...).datum(...).on(...)' are incompatible between these types.
    Type 'ValueFn<SVGElement, any, void>' is not assignable to type 'ValueFn<Element, any, void>'.
      Type 'Element' is not assignable to type 'SVGElement'.ts(2322)

特别注意最后一行。错误指出我会尝试将 Element 分配给 SVGElement,这当然是不可能的。但实际上,那不是我正在做的。 Typescript 似乎以某种方式反转了赋值和错误。

我该怎么做才能解决这个问题?

我偶然发现了问题的根源:因为带有 D3.js 代码的文件本来是要在 vscode webview 中使用的,因此需要进行不同的编译。因此我将它排除在扩展的正常 TS 构建之外。

一旦我包含它,问题就消失了。不知道为什么,但这对我来说已经解决了,尽管现在创建了一个错误的输出文件(这是另一个问题)。