Closed
Description
I am confused. It well can be the result of ECMAScript spec or something, but all this doesn't make sense to me.
TypeScript Version: 3.7.x-dev.201xxxxx
Search Terms: promise undefined
and I looked through all of the 5 pages + looked through FAQ
Code:
type TypeA = {
value: number;
}
const test = (): Promise<TypeA> => {
return new Promise<TypeA>(resolve => {
resolve(undefined); // Result of test() is Promise of TypeA. I return a promise that is resolved with undefined and it's ok for some reason.
});
};
const test2 = (): Promise<TypeA> => {
return Promise.resolve(undefined);
};
test().then(typeAInstance => {
// At this point here `typeAInstance` is of type TypeA and not! of `TypeA | undefined`
console.log(typeAInstance.value.toFixed())
});
Expected behavior:
Both Functions should prevent me from doing writing stupid code at compile time.
Actual behavior:
Only second one does prevent me. First one allows runtime error to happened in the end.
Related Issues:
I don't understand where this undefined
as one of the potential argument types is coming from:
My lib.es5.d.ts
contains this:
declare type PromiseConstructorLike = new <T>(executor: (resolve: (value?: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void) => PromiseLike<T>;
My lib.es2015.promise.d.ts
contains this:
new <T>(executor: (resolve: (value?: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void): Promise<T>;