Return returns 链式承诺的函数类型
Return type of a function that returns a chained promise
我有一个 class,它 return 是一个链式承诺,第一个承诺的类型是 angular.IPromise<Foo>
,第二个承诺的解析类型是 angular.IPromise<Bar>
。
为什么是doSomething
angular.IPromise<Bar>
的return类型?
我原以为 return 类型会是 angular.IPromise<Foo>
,因为这是函数 return 编辑的第一件事。我知道 then()
return 是一个承诺,并将 return 编辑的内容包装到它的响应中,但这仍然让我感到困惑。
import { Something } from '../somewhere';
import { Bar } from '../somewhereelse';
class Test {
doSomething(): angular.IPromise<Bar> {
return Something.getFoo() // getFoo() return type angular.IPromise<Foo>
.then(() => {
let x: Bar = {};
return x;
});
}
}
如有任何帮助,我们将不胜感激。如果需要,我非常乐意提供更多代码。
此 returns angular.IPromise<Bar>
,前提是代码可以编译。
接口可以映射到任意数量的 类,并且可以使用前缀为 I
的名称轻松识别它们。
具体类型将是 Promise 实现的细节,但是它满足 IPromise<Bar>
只要它 return 是 Bar
解决。
编辑:TypeScript 通过 then<TResult>(successCallback: (promiseValue: T) => IPromise<TResult>|TResult, ...): IPromise<TResult>
中的模板参数确定它。这静态地确定了回调的 return 类型。 source
另见:Whats the difference between "declare class" and "interface" in TypeScript
第一件事是:你没有 return Something.getFoo()
。
你returnSomething.getFoo().then(...)
。即使使用 promise 来执行异步任务,它们也会立即 returned。
then()
returnangular.IPromise
returned 承诺不是来自 Something.getFoo()
的承诺,而是 returned 的承诺Something.getFoo().then(...)
并且由于提供给 then()
的回调是 returning 一个 Bar
对象:promise.ten(foo=>return new Bar())
你的语句实际上 return 是一个 Promise<Bar>
对象。
如@TsatsuyukiIshi 所述,这是 angular.IPromise.then
的类型定义:
then<X>(successCallback: (promiseValue: T) => IPromise<X>|X, ...): IPromise<X>
此方法是通用的,其 return 类型 (X
) 取决于作为参数提供的类型 ((promiseValue: T) => IPromise<X>|X
)。
如果将 X
替换为 Bar
,这很明显:
then(successCallback: (promiseValue: T) => IPromise<Bar>|Bar, ...): IPromise<Bar>
我有一个 class,它 return 是一个链式承诺,第一个承诺的类型是 angular.IPromise<Foo>
,第二个承诺的解析类型是 angular.IPromise<Bar>
。
为什么是doSomething
angular.IPromise<Bar>
的return类型?
我原以为 return 类型会是 angular.IPromise<Foo>
,因为这是函数 return 编辑的第一件事。我知道 then()
return 是一个承诺,并将 return 编辑的内容包装到它的响应中,但这仍然让我感到困惑。
import { Something } from '../somewhere';
import { Bar } from '../somewhereelse';
class Test {
doSomething(): angular.IPromise<Bar> {
return Something.getFoo() // getFoo() return type angular.IPromise<Foo>
.then(() => {
let x: Bar = {};
return x;
});
}
}
如有任何帮助,我们将不胜感激。如果需要,我非常乐意提供更多代码。
此 returns angular.IPromise<Bar>
,前提是代码可以编译。
接口可以映射到任意数量的 类,并且可以使用前缀为 I
的名称轻松识别它们。
具体类型将是 Promise 实现的细节,但是它满足 IPromise<Bar>
只要它 return 是 Bar
解决。
编辑:TypeScript 通过 then<TResult>(successCallback: (promiseValue: T) => IPromise<TResult>|TResult, ...): IPromise<TResult>
中的模板参数确定它。这静态地确定了回调的 return 类型。 source
另见:Whats the difference between "declare class" and "interface" in TypeScript
第一件事是:你没有 return Something.getFoo()
。
你returnSomething.getFoo().then(...)
。即使使用 promise 来执行异步任务,它们也会立即 returned。
then()
returnangular.IPromise
returned 承诺不是来自 Something.getFoo()
的承诺,而是 returned 的承诺Something.getFoo().then(...)
并且由于提供给 then()
的回调是 returning 一个 Bar
对象:promise.ten(foo=>return new Bar())
你的语句实际上 return 是一个 Promise<Bar>
对象。
如@TsatsuyukiIshi 所述,这是 angular.IPromise.then
的类型定义:
then<X>(successCallback: (promiseValue: T) => IPromise<X>|X, ...): IPromise<X>
此方法是通用的,其 return 类型 (X
) 取决于作为参数提供的类型 ((promiseValue: T) => IPromise<X>|X
)。
如果将 X
替换为 Bar
,这很明显:
then(successCallback: (promiseValue: T) => IPromise<Bar>|Bar, ...): IPromise<Bar>