【问题标题】:Typescript errors don't match the definition file打字稿错误与定义文件不匹配
【发布时间】:2016-04-10 15:41:58
【问题描述】:

我刚切换到 VS2015 和 Typescript 1.7,在使用 JQuery 时遇到了一些奇怪的类型错误:

var someObj: <SomeCustomType> = <SomeCustomType>$element.data("source");

此行抛出以下错误:

类型“JQuery”不可分配给类型“SomeCustomType”。

JQuery definition file 显示(第 1553 行)此函数签名应返回 &lt;any&gt; 类型:

interface JQuery {

    //...

    data(key: string): any;

    //...
}

相同的代码在具有相同 Typescript 版本的 VS2013 上不会引发任何错误。

编辑:当然,我可以强制转换为 &lt;SomeCustomType&gt;&lt;any&gt;,但这意味着使用多个不应该存在的强制转换使代码膨胀,这在 d.ts 文件提供的情况下并不令人满意正确的签名。

我有什么遗漏吗?

编辑:也许我的问题不清楚。

在VS2013中,使用相同的TS版本和d.ts文件,

$element.data("source")

一切都好,VS2013看到&lt;any&gt;就开心了。

另一方面,VS2015 认为返回的对象应该是JQuery,因此抱怨,好像这个定义文件没有暴露提到的签名。

【问题讨论】:

  • 您可以尝试将返回的数据转换为该类型。
  • @toskv 当然,但这并不能解释根本问题。
  • 您可以在此处查看重大更改列表,也许会出现问题。 github.com/Microsoft/TypeScript/wiki/Breaking-Changes
  • 我不知道您要从哪个版本升级,但在 1.6 中添加到目标类型的显式转换似乎是一个不错的选择。 :)
  • @toskv 不,调用签名显式返回 ,但智能感知希望此返回类型为 类型。显式转换不会改变任何东西,因为转换对象仍然不能分配给 SomeCustomType。我正在考虑一些智能感知问题而不是 Typescript 问题,因为 VS2013 不会抱怨。

标签: jquery typescript visual-studio-2015 definitelytyped


【解决方案1】:

您需要更新以使用最新的 jquery.d.ts 文件,因为 TypeScript 1.7.5 更严格,而以前版本的 jquery.d.ts 实际上有一个错误。

这在Relax index signature checks for type any中有解释

您可以通过运行来使用TSD

npm install tsd@next -g
tsd install jquery -ors

【讨论】:

  • 这很有趣,尤其是this issue 链接自您提供的那个。我去看看。
【解决方案2】:

尝试将其转换为您想要的类型:

var someObj: SomeCustomType = <SomeCustomType> $element.data("source");

或更短:

var someObj = <SomeCustomType> $element.data("source");

【讨论】:

  • 如前所述,我的智能感知不会让我这样做,因为当 def 文件另有说明时,它认为函数返回类型是 JQuery 而不是任何类型。
  • hm,那么它确实看起来更像是一个智能感知问题。 :(
猜你喜欢
  • 2018-06-05
  • 2017-12-22
  • 2022-01-18
  • 2021-12-29
  • 2020-07-28
  • 2017-02-20
  • 1970-01-01
  • 1970-01-01
  • 2018-04-20
相关资源
最近更新 更多