mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-04 21:53:42 -06:00
fix(50591): RangeError: Maximum call stack size exceeded (#50594)
This commit is contained in:
parent
168186f93d
commit
23746af766
@ -23660,7 +23660,7 @@ namespace ts {
|
||||
}
|
||||
}
|
||||
|
||||
if (hasOnlyExpressionInitializer(declaration)) {
|
||||
if (hasOnlyExpressionInitializer(declaration) && isBlockScopedNameDeclaredBeforeUse(declaration, node.argumentExpression)) {
|
||||
const initializer = getEffectiveInitializer(declaration);
|
||||
return initializer && tryGetNameFromType(getTypeOfExpression(initializer));
|
||||
}
|
||||
|
||||
@ -0,0 +1,15 @@
|
||||
tests/cases/compiler/typeGuardNarrowsIndexedAccessOfKnownProperty10.ts(5,6): error TS2448: Block-scoped variable 'id' used before its declaration.
|
||||
|
||||
|
||||
==== tests/cases/compiler/typeGuardNarrowsIndexedAccessOfKnownProperty10.ts (1 errors) ====
|
||||
interface Foo { bar: any; }
|
||||
const bar: { [id: string]: number } = {};
|
||||
|
||||
(foo: Foo) => {
|
||||
bar[id]++;
|
||||
~~
|
||||
!!! error TS2448: Block-scoped variable 'id' used before its declaration.
|
||||
!!! related TS2728 tests/cases/compiler/typeGuardNarrowsIndexedAccessOfKnownProperty10.ts:6:8: 'id' is declared here.
|
||||
const id = foo.bar;
|
||||
}
|
||||
|
||||
@ -0,0 +1,17 @@
|
||||
//// [typeGuardNarrowsIndexedAccessOfKnownProperty10.ts]
|
||||
interface Foo { bar: any; }
|
||||
const bar: { [id: string]: number } = {};
|
||||
|
||||
(foo: Foo) => {
|
||||
bar[id]++;
|
||||
const id = foo.bar;
|
||||
}
|
||||
|
||||
|
||||
//// [typeGuardNarrowsIndexedAccessOfKnownProperty10.js]
|
||||
"use strict";
|
||||
var bar = {};
|
||||
(function (foo) {
|
||||
bar[id]++;
|
||||
var id = foo.bar;
|
||||
});
|
||||
@ -0,0 +1,24 @@
|
||||
=== tests/cases/compiler/typeGuardNarrowsIndexedAccessOfKnownProperty10.ts ===
|
||||
interface Foo { bar: any; }
|
||||
>Foo : Symbol(Foo, Decl(typeGuardNarrowsIndexedAccessOfKnownProperty10.ts, 0, 0))
|
||||
>bar : Symbol(Foo.bar, Decl(typeGuardNarrowsIndexedAccessOfKnownProperty10.ts, 0, 15))
|
||||
|
||||
const bar: { [id: string]: number } = {};
|
||||
>bar : Symbol(bar, Decl(typeGuardNarrowsIndexedAccessOfKnownProperty10.ts, 1, 5))
|
||||
>id : Symbol(id, Decl(typeGuardNarrowsIndexedAccessOfKnownProperty10.ts, 1, 14))
|
||||
|
||||
(foo: Foo) => {
|
||||
>foo : Symbol(foo, Decl(typeGuardNarrowsIndexedAccessOfKnownProperty10.ts, 3, 1))
|
||||
>Foo : Symbol(Foo, Decl(typeGuardNarrowsIndexedAccessOfKnownProperty10.ts, 0, 0))
|
||||
|
||||
bar[id]++;
|
||||
>bar : Symbol(bar, Decl(typeGuardNarrowsIndexedAccessOfKnownProperty10.ts, 1, 5))
|
||||
>id : Symbol(id, Decl(typeGuardNarrowsIndexedAccessOfKnownProperty10.ts, 5, 6))
|
||||
|
||||
const id = foo.bar;
|
||||
>id : Symbol(id, Decl(typeGuardNarrowsIndexedAccessOfKnownProperty10.ts, 5, 6))
|
||||
>foo.bar : Symbol(Foo.bar, Decl(typeGuardNarrowsIndexedAccessOfKnownProperty10.ts, 0, 15))
|
||||
>foo : Symbol(foo, Decl(typeGuardNarrowsIndexedAccessOfKnownProperty10.ts, 3, 1))
|
||||
>bar : Symbol(Foo.bar, Decl(typeGuardNarrowsIndexedAccessOfKnownProperty10.ts, 0, 15))
|
||||
}
|
||||
|
||||
@ -0,0 +1,26 @@
|
||||
=== tests/cases/compiler/typeGuardNarrowsIndexedAccessOfKnownProperty10.ts ===
|
||||
interface Foo { bar: any; }
|
||||
>bar : any
|
||||
|
||||
const bar: { [id: string]: number } = {};
|
||||
>bar : { [id: string]: number; }
|
||||
>id : string
|
||||
>{} : {}
|
||||
|
||||
(foo: Foo) => {
|
||||
>(foo: Foo) => { bar[id]++; const id = foo.bar;} : (foo: Foo) => void
|
||||
>foo : Foo
|
||||
|
||||
bar[id]++;
|
||||
>bar[id]++ : number
|
||||
>bar[id] : number
|
||||
>bar : { [id: string]: number; }
|
||||
>id : any
|
||||
|
||||
const id = foo.bar;
|
||||
>id : any
|
||||
>foo.bar : any
|
||||
>foo : Foo
|
||||
>bar : any
|
||||
}
|
||||
|
||||
@ -0,0 +1,9 @@
|
||||
// @strict: true
|
||||
|
||||
interface Foo { bar: any; }
|
||||
const bar: { [id: string]: number } = {};
|
||||
|
||||
(foo: Foo) => {
|
||||
bar[id]++;
|
||||
const id = foo.bar;
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user