【发布时间】:2014-10-18 23:53:33
【问题描述】:
在尝试将 jQuery Promises 与 .then 链接时,我在 TS 上遇到了一些困难
请参阅下面的代码:
function first(): JQueryPromise<string>
{
return $.when('1');
}
function test()
{
$.when()
.then(() =>
{
return first();
})
.then((value) =>
{
var str: string = value; //<--- type mismatch here.
});
}
Typescript 期望该值的类型是 JQueryPromise 而不是“字符串”。
如果我将价值赋予任何东西,我就能让它发挥作用。
是否有不同的实现方式,或者JQuery定义文件有错误?
谢谢
【问题讨论】:
-
您的使用情况看起来不错。 Promise 的类型推断不好/很难尝试显式输入。
-
我以前也有同样的问题。奇怪的是,在检查定义文件时,没有定义 then 匹配 VS 的 IntelliSense 显示或编译器抱怨的 then 的签名。我不知道 TypeScript intellisense 是否由编译器提供支持,但如果是,我怀疑它是编译器错误。
-
@BenjaminGruenbaum 你的意思是执行以下操作:.then((value: string) => { var str: string = value; });
-
@OliverWeichhold 这是一个类型错误。 JavaScript Promise 既是 map 又是 flatMap,
then可以是Promise<T> -> T -> Promise<U> -> Promise<U>或Promise<T> -> T -> U -> Promise<U>,所以当你从then返回一个 Promise 时,编译器无法判断你正在使用哪个重载,因为你可能是使用诺言的诺言。例如,如果您的.then返回一个 Promise`,它不知道它的返回是 Promise<string>还是Promise<Promise<string>>(是U和Promise<string>还是Promise<U>和Promise<string>和 @ 987654333@ 是string?) -
其实我并没有觉得它那么糟糕 :-)
标签: jquery typescript promise