Merge pull request #32077 from andrewbranch/bug/31114

Fix incorrect noImplicitAny error on contextual union function signature
This commit is contained in:
Andrew Branch 2019-07-03 10:10:10 -07:00 committed by GitHub
commit 16bbb4d002
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 41 additions and 1 deletions

View File

@ -19129,7 +19129,9 @@ namespace ts {
}
}
// Result is union of signatures collected (return type is union of return types of this signature set)
return signatureList && createUnionSignature(signatureList[0], signatureList);
if (signatureList) {
return signatureList.length === 1 ? signatureList[0] : createUnionSignature(signatureList[0], signatureList);
}
}
function checkSpreadExpression(node: SpreadElement, checkMode?: CheckMode): Type {

View File

@ -0,0 +1,8 @@
//// [functionExpressionContextualTyping3.ts]
// #31114
declare function f<T>(value: T | number): void;
f((a: any) => "")
//// [functionExpressionContextualTyping3.js]
f(function (a) { return ""; });

View File

@ -0,0 +1,12 @@
=== tests/cases/conformance/expressions/contextualTyping/functionExpressionContextualTyping3.ts ===
// #31114
declare function f<T>(value: T | number): void;
>f : Symbol(f, Decl(functionExpressionContextualTyping3.ts, 0, 0))
>T : Symbol(T, Decl(functionExpressionContextualTyping3.ts, 1, 19))
>value : Symbol(value, Decl(functionExpressionContextualTyping3.ts, 1, 22))
>T : Symbol(T, Decl(functionExpressionContextualTyping3.ts, 1, 19))
f((a: any) => "")
>f : Symbol(f, Decl(functionExpressionContextualTyping3.ts, 0, 0))
>a : Symbol(a, Decl(functionExpressionContextualTyping3.ts, 2, 3))

View File

@ -0,0 +1,13 @@
=== tests/cases/conformance/expressions/contextualTyping/functionExpressionContextualTyping3.ts ===
// #31114
declare function f<T>(value: T | number): void;
>f : <T>(value: number | T) => void
>value : number | T
f((a: any) => "")
>f((a: any) => "") : void
>f : <T>(value: number | T) => void
>(a: any) => "" : (a: any) => ""
>a : any
>"" : ""

View File

@ -0,0 +1,5 @@
// @noImplicitAny: true
// #31114
declare function f<T>(value: T | number): void;
f((a: any) => "")