mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-07-02 14:48:32 -05:00
Fix #8423: Remove undefined while getting the type of the first argument of then signature
This commit is contained in:
@@ -13443,7 +13443,7 @@ namespace ts {
|
||||
}
|
||||
|
||||
function getTypeOfFirstParameterOfSignature(signature: Signature) {
|
||||
return getTypeAtPosition(signature, 0);
|
||||
return getTypeWithFacts(getTypeAtPosition(signature, 0), TypeFacts.NEUndefined);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
//// [asyncFunctionsAndStrictNullChecks.ts]
|
||||
|
||||
declare namespace Windows.Foundation {
|
||||
interface IPromise<TResult> {
|
||||
then<U>(success?: (value: TResult) => IPromise<U>, error?: (error: any) => IPromise<U>, progress?: (progress: any) => void): IPromise<U>;
|
||||
then<U>(success?: (value: TResult) => IPromise<U>, error?: (error: any) => U, progress?: (progress: any) => void): IPromise<U>;
|
||||
then<U>(success?: (value: TResult) => U, error?: (error: any) => IPromise<U>, progress?: (progress: any) => void): IPromise<U>;
|
||||
then<U>(success?: (value: TResult) => U, error?: (error: any) => U, progress?: (progress: any) => void): IPromise<U>;
|
||||
done<U>(success?: (value: TResult) => any, error?: (error: any) => any, progress?: (progress: any) => void): void;
|
||||
|
||||
cancel(): void;
|
||||
}
|
||||
}
|
||||
|
||||
async function sample(promise: Windows.Foundation.IPromise<number>) {
|
||||
var number = await promise;
|
||||
}
|
||||
|
||||
|
||||
//// [asyncFunctionsAndStrictNullChecks.js]
|
||||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
||||
return new (P || (P = Promise))(function (resolve, reject) {
|
||||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
||||
function rejected(value) { try { step(generator.throw(value)); } catch (e) { reject(e); } }
|
||||
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
||||
step((generator = generator.apply(thisArg, _arguments)).next());
|
||||
});
|
||||
};
|
||||
function sample(promise) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
var number = yield promise;
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
=== tests/cases/compiler/asyncFunctionsAndStrictNullChecks.ts ===
|
||||
|
||||
declare namespace Windows.Foundation {
|
||||
>Windows : Symbol(Windows, Decl(asyncFunctionsAndStrictNullChecks.ts, 0, 0))
|
||||
>Foundation : Symbol(Foundation, Decl(asyncFunctionsAndStrictNullChecks.ts, 1, 26))
|
||||
|
||||
interface IPromise<TResult> {
|
||||
>IPromise : Symbol(IPromise, Decl(asyncFunctionsAndStrictNullChecks.ts, 1, 38))
|
||||
>TResult : Symbol(TResult, Decl(asyncFunctionsAndStrictNullChecks.ts, 2, 23))
|
||||
|
||||
then<U>(success?: (value: TResult) => IPromise<U>, error?: (error: any) => IPromise<U>, progress?: (progress: any) => void): IPromise<U>;
|
||||
>then : Symbol(IPromise.then, Decl(asyncFunctionsAndStrictNullChecks.ts, 2, 33), Decl(asyncFunctionsAndStrictNullChecks.ts, 3, 145), Decl(asyncFunctionsAndStrictNullChecks.ts, 4, 135), Decl(asyncFunctionsAndStrictNullChecks.ts, 5, 135))
|
||||
>U : Symbol(U, Decl(asyncFunctionsAndStrictNullChecks.ts, 3, 13))
|
||||
>success : Symbol(success, Decl(asyncFunctionsAndStrictNullChecks.ts, 3, 16))
|
||||
>value : Symbol(value, Decl(asyncFunctionsAndStrictNullChecks.ts, 3, 27))
|
||||
>TResult : Symbol(TResult, Decl(asyncFunctionsAndStrictNullChecks.ts, 2, 23))
|
||||
>IPromise : Symbol(IPromise, Decl(asyncFunctionsAndStrictNullChecks.ts, 1, 38))
|
||||
>U : Symbol(U, Decl(asyncFunctionsAndStrictNullChecks.ts, 3, 13))
|
||||
>error : Symbol(error, Decl(asyncFunctionsAndStrictNullChecks.ts, 3, 58))
|
||||
>error : Symbol(error, Decl(asyncFunctionsAndStrictNullChecks.ts, 3, 68))
|
||||
>IPromise : Symbol(IPromise, Decl(asyncFunctionsAndStrictNullChecks.ts, 1, 38))
|
||||
>U : Symbol(U, Decl(asyncFunctionsAndStrictNullChecks.ts, 3, 13))
|
||||
>progress : Symbol(progress, Decl(asyncFunctionsAndStrictNullChecks.ts, 3, 95))
|
||||
>progress : Symbol(progress, Decl(asyncFunctionsAndStrictNullChecks.ts, 3, 108))
|
||||
>IPromise : Symbol(IPromise, Decl(asyncFunctionsAndStrictNullChecks.ts, 1, 38))
|
||||
>U : Symbol(U, Decl(asyncFunctionsAndStrictNullChecks.ts, 3, 13))
|
||||
|
||||
then<U>(success?: (value: TResult) => IPromise<U>, error?: (error: any) => U, progress?: (progress: any) => void): IPromise<U>;
|
||||
>then : Symbol(IPromise.then, Decl(asyncFunctionsAndStrictNullChecks.ts, 2, 33), Decl(asyncFunctionsAndStrictNullChecks.ts, 3, 145), Decl(asyncFunctionsAndStrictNullChecks.ts, 4, 135), Decl(asyncFunctionsAndStrictNullChecks.ts, 5, 135))
|
||||
>U : Symbol(U, Decl(asyncFunctionsAndStrictNullChecks.ts, 4, 13))
|
||||
>success : Symbol(success, Decl(asyncFunctionsAndStrictNullChecks.ts, 4, 16))
|
||||
>value : Symbol(value, Decl(asyncFunctionsAndStrictNullChecks.ts, 4, 27))
|
||||
>TResult : Symbol(TResult, Decl(asyncFunctionsAndStrictNullChecks.ts, 2, 23))
|
||||
>IPromise : Symbol(IPromise, Decl(asyncFunctionsAndStrictNullChecks.ts, 1, 38))
|
||||
>U : Symbol(U, Decl(asyncFunctionsAndStrictNullChecks.ts, 4, 13))
|
||||
>error : Symbol(error, Decl(asyncFunctionsAndStrictNullChecks.ts, 4, 58))
|
||||
>error : Symbol(error, Decl(asyncFunctionsAndStrictNullChecks.ts, 4, 68))
|
||||
>U : Symbol(U, Decl(asyncFunctionsAndStrictNullChecks.ts, 4, 13))
|
||||
>progress : Symbol(progress, Decl(asyncFunctionsAndStrictNullChecks.ts, 4, 85))
|
||||
>progress : Symbol(progress, Decl(asyncFunctionsAndStrictNullChecks.ts, 4, 98))
|
||||
>IPromise : Symbol(IPromise, Decl(asyncFunctionsAndStrictNullChecks.ts, 1, 38))
|
||||
>U : Symbol(U, Decl(asyncFunctionsAndStrictNullChecks.ts, 4, 13))
|
||||
|
||||
then<U>(success?: (value: TResult) => U, error?: (error: any) => IPromise<U>, progress?: (progress: any) => void): IPromise<U>;
|
||||
>then : Symbol(IPromise.then, Decl(asyncFunctionsAndStrictNullChecks.ts, 2, 33), Decl(asyncFunctionsAndStrictNullChecks.ts, 3, 145), Decl(asyncFunctionsAndStrictNullChecks.ts, 4, 135), Decl(asyncFunctionsAndStrictNullChecks.ts, 5, 135))
|
||||
>U : Symbol(U, Decl(asyncFunctionsAndStrictNullChecks.ts, 5, 13))
|
||||
>success : Symbol(success, Decl(asyncFunctionsAndStrictNullChecks.ts, 5, 16))
|
||||
>value : Symbol(value, Decl(asyncFunctionsAndStrictNullChecks.ts, 5, 27))
|
||||
>TResult : Symbol(TResult, Decl(asyncFunctionsAndStrictNullChecks.ts, 2, 23))
|
||||
>U : Symbol(U, Decl(asyncFunctionsAndStrictNullChecks.ts, 5, 13))
|
||||
>error : Symbol(error, Decl(asyncFunctionsAndStrictNullChecks.ts, 5, 48))
|
||||
>error : Symbol(error, Decl(asyncFunctionsAndStrictNullChecks.ts, 5, 58))
|
||||
>IPromise : Symbol(IPromise, Decl(asyncFunctionsAndStrictNullChecks.ts, 1, 38))
|
||||
>U : Symbol(U, Decl(asyncFunctionsAndStrictNullChecks.ts, 5, 13))
|
||||
>progress : Symbol(progress, Decl(asyncFunctionsAndStrictNullChecks.ts, 5, 85))
|
||||
>progress : Symbol(progress, Decl(asyncFunctionsAndStrictNullChecks.ts, 5, 98))
|
||||
>IPromise : Symbol(IPromise, Decl(asyncFunctionsAndStrictNullChecks.ts, 1, 38))
|
||||
>U : Symbol(U, Decl(asyncFunctionsAndStrictNullChecks.ts, 5, 13))
|
||||
|
||||
then<U>(success?: (value: TResult) => U, error?: (error: any) => U, progress?: (progress: any) => void): IPromise<U>;
|
||||
>then : Symbol(IPromise.then, Decl(asyncFunctionsAndStrictNullChecks.ts, 2, 33), Decl(asyncFunctionsAndStrictNullChecks.ts, 3, 145), Decl(asyncFunctionsAndStrictNullChecks.ts, 4, 135), Decl(asyncFunctionsAndStrictNullChecks.ts, 5, 135))
|
||||
>U : Symbol(U, Decl(asyncFunctionsAndStrictNullChecks.ts, 6, 13))
|
||||
>success : Symbol(success, Decl(asyncFunctionsAndStrictNullChecks.ts, 6, 16))
|
||||
>value : Symbol(value, Decl(asyncFunctionsAndStrictNullChecks.ts, 6, 27))
|
||||
>TResult : Symbol(TResult, Decl(asyncFunctionsAndStrictNullChecks.ts, 2, 23))
|
||||
>U : Symbol(U, Decl(asyncFunctionsAndStrictNullChecks.ts, 6, 13))
|
||||
>error : Symbol(error, Decl(asyncFunctionsAndStrictNullChecks.ts, 6, 48))
|
||||
>error : Symbol(error, Decl(asyncFunctionsAndStrictNullChecks.ts, 6, 58))
|
||||
>U : Symbol(U, Decl(asyncFunctionsAndStrictNullChecks.ts, 6, 13))
|
||||
>progress : Symbol(progress, Decl(asyncFunctionsAndStrictNullChecks.ts, 6, 75))
|
||||
>progress : Symbol(progress, Decl(asyncFunctionsAndStrictNullChecks.ts, 6, 88))
|
||||
>IPromise : Symbol(IPromise, Decl(asyncFunctionsAndStrictNullChecks.ts, 1, 38))
|
||||
>U : Symbol(U, Decl(asyncFunctionsAndStrictNullChecks.ts, 6, 13))
|
||||
|
||||
done<U>(success?: (value: TResult) => any, error?: (error: any) => any, progress?: (progress: any) => void): void;
|
||||
>done : Symbol(IPromise.done, Decl(asyncFunctionsAndStrictNullChecks.ts, 6, 125))
|
||||
>U : Symbol(U, Decl(asyncFunctionsAndStrictNullChecks.ts, 7, 13))
|
||||
>success : Symbol(success, Decl(asyncFunctionsAndStrictNullChecks.ts, 7, 16))
|
||||
>value : Symbol(value, Decl(asyncFunctionsAndStrictNullChecks.ts, 7, 27))
|
||||
>TResult : Symbol(TResult, Decl(asyncFunctionsAndStrictNullChecks.ts, 2, 23))
|
||||
>error : Symbol(error, Decl(asyncFunctionsAndStrictNullChecks.ts, 7, 50))
|
||||
>error : Symbol(error, Decl(asyncFunctionsAndStrictNullChecks.ts, 7, 60))
|
||||
>progress : Symbol(progress, Decl(asyncFunctionsAndStrictNullChecks.ts, 7, 79))
|
||||
>progress : Symbol(progress, Decl(asyncFunctionsAndStrictNullChecks.ts, 7, 92))
|
||||
|
||||
cancel(): void;
|
||||
>cancel : Symbol(IPromise.cancel, Decl(asyncFunctionsAndStrictNullChecks.ts, 7, 122))
|
||||
}
|
||||
}
|
||||
|
||||
async function sample(promise: Windows.Foundation.IPromise<number>) {
|
||||
>sample : Symbol(sample, Decl(asyncFunctionsAndStrictNullChecks.ts, 11, 1))
|
||||
>promise : Symbol(promise, Decl(asyncFunctionsAndStrictNullChecks.ts, 13, 22))
|
||||
>Windows : Symbol(Windows, Decl(asyncFunctionsAndStrictNullChecks.ts, 0, 0))
|
||||
>Foundation : Symbol(Windows.Foundation, Decl(asyncFunctionsAndStrictNullChecks.ts, 1, 26))
|
||||
>IPromise : Symbol(Windows.Foundation.IPromise, Decl(asyncFunctionsAndStrictNullChecks.ts, 1, 38))
|
||||
|
||||
var number = await promise;
|
||||
>number : Symbol(number, Decl(asyncFunctionsAndStrictNullChecks.ts, 14, 7))
|
||||
>promise : Symbol(promise, Decl(asyncFunctionsAndStrictNullChecks.ts, 13, 22))
|
||||
}
|
||||
|
||||
@@ -0,0 +1,103 @@
|
||||
=== tests/cases/compiler/asyncFunctionsAndStrictNullChecks.ts ===
|
||||
|
||||
declare namespace Windows.Foundation {
|
||||
>Windows : any
|
||||
>Foundation : any
|
||||
|
||||
interface IPromise<TResult> {
|
||||
>IPromise : IPromise<TResult>
|
||||
>TResult : TResult
|
||||
|
||||
then<U>(success?: (value: TResult) => IPromise<U>, error?: (error: any) => IPromise<U>, progress?: (progress: any) => void): IPromise<U>;
|
||||
>then : { <U>(success?: ((value: TResult) => IPromise<U>) | undefined, error?: ((error: any) => IPromise<U>) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U>; <U>(success?: ((value: TResult) => IPromise<U>) | undefined, error?: ((error: any) => U) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U>; <U>(success?: ((value: TResult) => U) | undefined, error?: ((error: any) => IPromise<U>) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U>; <U>(success?: ((value: TResult) => U) | undefined, error?: ((error: any) => U) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U>; }
|
||||
>U : U
|
||||
>success : ((value: TResult) => IPromise<U>) | undefined
|
||||
>value : TResult
|
||||
>TResult : TResult
|
||||
>IPromise : IPromise<TResult>
|
||||
>U : U
|
||||
>error : ((error: any) => IPromise<U>) | undefined
|
||||
>error : any
|
||||
>IPromise : IPromise<TResult>
|
||||
>U : U
|
||||
>progress : ((progress: any) => void) | undefined
|
||||
>progress : any
|
||||
>IPromise : IPromise<TResult>
|
||||
>U : U
|
||||
|
||||
then<U>(success?: (value: TResult) => IPromise<U>, error?: (error: any) => U, progress?: (progress: any) => void): IPromise<U>;
|
||||
>then : { <U>(success?: ((value: TResult) => IPromise<U>) | undefined, error?: ((error: any) => IPromise<U>) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U>; <U>(success?: ((value: TResult) => IPromise<U>) | undefined, error?: ((error: any) => U) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U>; <U>(success?: ((value: TResult) => U) | undefined, error?: ((error: any) => IPromise<U>) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U>; <U>(success?: ((value: TResult) => U) | undefined, error?: ((error: any) => U) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U>; }
|
||||
>U : U
|
||||
>success : ((value: TResult) => IPromise<U>) | undefined
|
||||
>value : TResult
|
||||
>TResult : TResult
|
||||
>IPromise : IPromise<TResult>
|
||||
>U : U
|
||||
>error : ((error: any) => U) | undefined
|
||||
>error : any
|
||||
>U : U
|
||||
>progress : ((progress: any) => void) | undefined
|
||||
>progress : any
|
||||
>IPromise : IPromise<TResult>
|
||||
>U : U
|
||||
|
||||
then<U>(success?: (value: TResult) => U, error?: (error: any) => IPromise<U>, progress?: (progress: any) => void): IPromise<U>;
|
||||
>then : { <U>(success?: ((value: TResult) => IPromise<U>) | undefined, error?: ((error: any) => IPromise<U>) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U>; <U>(success?: ((value: TResult) => IPromise<U>) | undefined, error?: ((error: any) => U) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U>; <U>(success?: ((value: TResult) => U) | undefined, error?: ((error: any) => IPromise<U>) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U>; <U>(success?: ((value: TResult) => U) | undefined, error?: ((error: any) => U) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U>; }
|
||||
>U : U
|
||||
>success : ((value: TResult) => U) | undefined
|
||||
>value : TResult
|
||||
>TResult : TResult
|
||||
>U : U
|
||||
>error : ((error: any) => IPromise<U>) | undefined
|
||||
>error : any
|
||||
>IPromise : IPromise<TResult>
|
||||
>U : U
|
||||
>progress : ((progress: any) => void) | undefined
|
||||
>progress : any
|
||||
>IPromise : IPromise<TResult>
|
||||
>U : U
|
||||
|
||||
then<U>(success?: (value: TResult) => U, error?: (error: any) => U, progress?: (progress: any) => void): IPromise<U>;
|
||||
>then : { <U>(success?: ((value: TResult) => IPromise<U>) | undefined, error?: ((error: any) => IPromise<U>) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U>; <U>(success?: ((value: TResult) => IPromise<U>) | undefined, error?: ((error: any) => U) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U>; <U>(success?: ((value: TResult) => U) | undefined, error?: ((error: any) => IPromise<U>) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U>; <U>(success?: ((value: TResult) => U) | undefined, error?: ((error: any) => U) | undefined, progress?: ((progress: any) => void) | undefined): IPromise<U>; }
|
||||
>U : U
|
||||
>success : ((value: TResult) => U) | undefined
|
||||
>value : TResult
|
||||
>TResult : TResult
|
||||
>U : U
|
||||
>error : ((error: any) => U) | undefined
|
||||
>error : any
|
||||
>U : U
|
||||
>progress : ((progress: any) => void) | undefined
|
||||
>progress : any
|
||||
>IPromise : IPromise<TResult>
|
||||
>U : U
|
||||
|
||||
done<U>(success?: (value: TResult) => any, error?: (error: any) => any, progress?: (progress: any) => void): void;
|
||||
>done : <U>(success?: ((value: TResult) => any) | undefined, error?: ((error: any) => any) | undefined, progress?: ((progress: any) => void) | undefined) => void
|
||||
>U : U
|
||||
>success : ((value: TResult) => any) | undefined
|
||||
>value : TResult
|
||||
>TResult : TResult
|
||||
>error : ((error: any) => any) | undefined
|
||||
>error : any
|
||||
>progress : ((progress: any) => void) | undefined
|
||||
>progress : any
|
||||
|
||||
cancel(): void;
|
||||
>cancel : () => void
|
||||
}
|
||||
}
|
||||
|
||||
async function sample(promise: Windows.Foundation.IPromise<number>) {
|
||||
>sample : (promise: Windows.Foundation.IPromise<number>) => Promise<void>
|
||||
>promise : Windows.Foundation.IPromise<number>
|
||||
>Windows : any
|
||||
>Foundation : any
|
||||
>IPromise : Windows.Foundation.IPromise<TResult>
|
||||
|
||||
var number = await promise;
|
||||
>number : number
|
||||
>await promise : number
|
||||
>promise : Windows.Foundation.IPromise<number>
|
||||
}
|
||||
|
||||
18
tests/cases/compiler/asyncFunctionsAndStrictNullChecks.ts
Normal file
18
tests/cases/compiler/asyncFunctionsAndStrictNullChecks.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
// @target: es6
|
||||
// @strictNullChecks: true
|
||||
|
||||
declare namespace Windows.Foundation {
|
||||
interface IPromise<TResult> {
|
||||
then<U>(success?: (value: TResult) => IPromise<U>, error?: (error: any) => IPromise<U>, progress?: (progress: any) => void): IPromise<U>;
|
||||
then<U>(success?: (value: TResult) => IPromise<U>, error?: (error: any) => U, progress?: (progress: any) => void): IPromise<U>;
|
||||
then<U>(success?: (value: TResult) => U, error?: (error: any) => IPromise<U>, progress?: (progress: any) => void): IPromise<U>;
|
||||
then<U>(success?: (value: TResult) => U, error?: (error: any) => U, progress?: (progress: any) => void): IPromise<U>;
|
||||
done<U>(success?: (value: TResult) => any, error?: (error: any) => any, progress?: (progress: any) => void): void;
|
||||
|
||||
cancel(): void;
|
||||
}
|
||||
}
|
||||
|
||||
async function sample(promise: Windows.Foundation.IPromise<number>) {
|
||||
var number = await promise;
|
||||
}
|
||||
Reference in New Issue
Block a user