【发布时间】:2016-04-10 15:41:58
【问题描述】:
我刚切换到 VS2015 和 Typescript 1.7,在使用 JQuery 时遇到了一些奇怪的类型错误:
var someObj: <SomeCustomType> = <SomeCustomType>$element.data("source");
此行抛出以下错误:
类型“JQuery”不可分配给类型“SomeCustomType”。
但JQuery definition file 显示(第 1553 行)此函数签名应返回 <any> 类型:
interface JQuery {
//...
data(key: string): any;
//...
}
相同的代码在具有相同 Typescript 版本的 VS2013 上不会引发任何错误。
编辑:当然,我可以强制转换为 <SomeCustomType><any>,但这意味着使用多个不应该存在的强制转换使代码膨胀,这在 d.ts 文件提供的情况下并不令人满意正确的签名。
我有什么遗漏吗?
编辑:也许我的问题不清楚。
在VS2013中,使用相同的TS版本和d.ts文件,
$element.data("source")
一切都好,VS2013看到<any>就开心了。
另一方面,VS2015 认为返回的对象应该是JQuery,因此抱怨,好像这个定义文件没有暴露提到的签名。
【问题讨论】:
-
您可以尝试将返回的数据转换为该类型。
-
@toskv 当然,但这并不能解释根本问题。
-
您可以在此处查看重大更改列表,也许会出现问题。 github.com/Microsoft/TypeScript/wiki/Breaking-Changes
-
我不知道您要从哪个版本升级,但在 1.6 中添加到目标类型的显式转换似乎是一个不错的选择。 :)
-
@toskv 不,调用签名显式返回
,但智能感知希望此返回类型为 类型。显式转换不会改变任何东西,因为转换对象仍然不能分配给 SomeCustomType。我正在考虑一些智能感知问题而不是 Typescript 问题,因为 VS2013 不会抱怨。
标签: jquery typescript visual-studio-2015 definitelytyped