Следующий код верен с точки зрения возвращаемого типа, поскольку then
всегда возвращает массив обещаний.Определение типа типа для prom.reject
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?
})
машинопись ошибка броска:
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
никогда не вернется void
.
Я могу указать тип .then<Promise<any>>
, но это скорее обходное решение, а не правильное решение.
Как это правильно?
В качестве лучшей практики, конечно, вы правы, но в то же время, нет никаких причин, почему вы не могли вернуться 'Promise.resolve () 'и/или' Promise.reject() 'из обработчика' then', и у OP есть законный вопрос относительно того, почему TypeScript недовольна этим. –