TypeScript type definition for promise.reject
You should not return Promise.resolve
and Promise.reject
inside a promise chain. The resolve
should be driven by simple return and reject
should be driven by an explicit 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?})
More
More on promise chaining https://basarat.gitbooks.io/typescript/content/docs/promise.html
Typescript is complaining about the difference in return type between your Promise.reject
return value (Promise<void>
) and your Promise.resolve
value (Promise<string[]>
).
Casting your then
call as .then<Promise<void | string[]>>
will let the compiler know of the union return type.
as @basarat notes, you should just throw an error instead of using Promise.reject (which will be passed to whatever catch handler is provided).