Ваша ветка else
показывает слабость в определении на PromiseLike
. Рассмотрим этот пример .
async function f() {
let t: {a: string} = await Promise.resolve(1).then<{a: string}>();
console.log(t, t.a, typeof t, typeof t.a);
}
f();
t
имеет тип number
не object
, но система типов считает, что это объект.
Если ваш цель состоит в том, чтобы обеспечить соответствие Promise
, вы можете просто привести возвращаемое значение к типу возвращаемого значения, как в:
return Promise.resolve(done) as PromiseLike<TResult1>
, или, чтобы быть более безопасным, вызвать исключение.