Merge pull request #18392 from Microsoft/fix-contextually-typing-arguments-object

Fix contextually typing arguments object
This commit is contained in:
Nathan Shively-Sanders
2017-09-11 16:22:17 -07:00
committed by GitHub
4 changed files with 45 additions and 1 deletions

View File

@@ -16703,8 +16703,9 @@ namespace ts {
}
}
if (signature.hasRestParameter && isRestParameterIndex(context, signature.parameters.length - 1)) {
// parameter might be a transient symbol generated by use of `arguments` in the function body.
const parameter = lastOrUndefined(signature.parameters);
if (!getEffectiveTypeAnnotationNode(<ParameterDeclaration>parameter.valueDeclaration)) {
if (isTransientSymbol(parameter) || !getEffectiveTypeAnnotationNode(<ParameterDeclaration>parameter.valueDeclaration)) {
const contextualParameterType = getTypeOfSymbol(lastOrUndefined(context.parameters));
assignTypeToParameterAndFixTypeParameters(parameter, contextualParameterType);
}

View File

@@ -0,0 +1,14 @@
=== tests/cases/compiler/foo.js ===
// Repro for #16585
const x = {
>x : Symbol(x, Decl(foo.js, 1, 5))
bar() {
>bar : Symbol(bar, Decl(foo.js, 1, 11))
setTimeout(function() { arguments }, 0);
>setTimeout : Symbol(setTimeout, Decl(lib.dom.d.ts, --, --), Decl(lib.dom.d.ts, --, --))
>arguments : Symbol(arguments)
}
}

View File

@@ -0,0 +1,18 @@
=== tests/cases/compiler/foo.js ===
// Repro for #16585
const x = {
>x : { [x: string]: any; bar(): void; }
>{ bar() { setTimeout(function() { arguments }, 0); }} : { [x: string]: any; bar(): void; }
bar() {
>bar : () => void
setTimeout(function() { arguments }, 0);
>setTimeout(function() { arguments }, 0) : number
>setTimeout : { (handler: (...args: any[]) => void, timeout: number): number; (handler: any, timeout?: any, ...args: any[]): number; }
>function() { arguments } : (...args: any[]) => void
>arguments : IArguments
>0 : 0
}
}

View File

@@ -0,0 +1,11 @@
// @noEmit: true
// @allowJs: true
// @checkJs: true
// @lib: es2017, dom
// @Filename: foo.js
// Repro for #16585
const x = {
bar() {
setTimeout(function() { arguments }, 0);
}
}