promise.reject 的 TypeScript 类型定义
TypeScript type definition for promise.reject
以下代码就 return 编辑的类型而言是正确的,因为 then
总是 return promise 数组。
Promise.resolve(['one', 'two'])
.then( arr =>
{
if( arr.indexOf('three') === -1 )
return Promise.reject( new Error('Where is three?') );
return Promise.resolve(arr);
})
.catch( err =>
{
console.log(err); // Error: where is three?
})
TypeScript 抛出错误:
The type argument for type parameter 'TResult' cannot be inferred from the usage. Consider specifying the type arguments explicitly.
Type argument candidate 'void' is not a valid type argument because it is not a supertype of candidate 'string[]'.
但实际上,then
永远不会returnvoid
。
我可以明确指定类型 .then<Promise<any>>
,但这更像是一种变通方法,而不是正确的解决方案。
这个怎么写对?
Typescript 抱怨 return 类型在您的 Promise.reject
return 值 (Promise<void>
) 和 Promise.resolve
值 (Promise<string[]>
).
将您的 then
调用转换为 .then<Promise<void | string[]>>
将使编译器知道联合 return 类型。
正如@basarat 指出的那样,您应该抛出错误而不是使用 Promise.reject(它将传递给提供的任何捕获处理程序)。
你不应该 return Promise.resolve
和 Promise.reject
在 承诺链中。 resolve
应该由简单的 return 驱动,reject
应该由显式的 throw new Error
驱动。
Promise.resolve(['one', 'two'])
.then( arr =>
{
if( arr.indexOf('three') === -1 )
throw new Error('Where is three?');
return arr;
})
.catch( err =>
{
console.log(err); // Error: where is three?
})
更多
更多关于承诺链的信息https://basarat.gitbooks.io/typescript/content/docs/promise.html
以下代码就 return 编辑的类型而言是正确的,因为 then
总是 return promise 数组。
Promise.resolve(['one', 'two'])
.then( arr =>
{
if( arr.indexOf('three') === -1 )
return Promise.reject( new Error('Where is three?') );
return Promise.resolve(arr);
})
.catch( err =>
{
console.log(err); // Error: where is three?
})
TypeScript 抛出错误:
The type argument for type parameter 'TResult' cannot be inferred from the usage. Consider specifying the type arguments explicitly. Type argument candidate 'void' is not a valid type argument because it is not a supertype of candidate 'string[]'.
但实际上,then
永远不会returnvoid
。
我可以明确指定类型 .then<Promise<any>>
,但这更像是一种变通方法,而不是正确的解决方案。
这个怎么写对?
Typescript 抱怨 return 类型在您的 Promise.reject
return 值 (Promise<void>
) 和 Promise.resolve
值 (Promise<string[]>
).
将您的 then
调用转换为 .then<Promise<void | string[]>>
将使编译器知道联合 return 类型。
正如@basarat 指出的那样,您应该抛出错误而不是使用 Promise.reject(它将传递给提供的任何捕获处理程序)。
你不应该 return Promise.resolve
和 Promise.reject
在 承诺链中。 resolve
应该由简单的 return 驱动,reject
应该由显式的 throw new Error
驱动。
Promise.resolve(['one', 'two'])
.then( arr =>
{
if( arr.indexOf('three') === -1 )
throw new Error('Where is three?');
return arr;
})
.catch( err =>
{
console.log(err); // Error: where is three?
})
更多
更多关于承诺链的信息https://basarat.gitbooks.io/typescript/content/docs/promise.html