Skip to content

Commit 8b7a620

Browse files
committed
Make isNonLocalAlias a type guard
1 parent e770b1d commit 8b7a620

File tree

1 file changed

+6
-7
lines changed

1 file changed

+6
-7
lines changed

src/compiler/checker.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1693,9 +1693,9 @@ namespace ts {
16931693
function checkResolvedBlockScopedVariable(result: Symbol, errorLocation: Node): void {
16941694
Debug.assert(!!(result.flags & SymbolFlags.BlockScopedVariable || result.flags & SymbolFlags.Class || result.flags & SymbolFlags.Enum));
16951695
// Block-scoped variables cannot be used before their definition
1696-
const declaration = forEach(result.declarations, d => isBlockOrCatchScoped(d) || isClassLike(d) || (d.kind === SyntaxKind.EnumDeclaration) ? d : undefined)!;
1696+
const declaration = forEach(result.declarations, d => isBlockOrCatchScoped(d) || isClassLike(d) || (d.kind === SyntaxKind.EnumDeclaration) ? d : undefined);
16971697

1698-
Debug.assert(declaration !== undefined, "Declaration to checkResolvedBlockScopedVariable is undefined");
1698+
if(declaration === undefined) return Debug.fail("Declaration to checkResolvedBlockScopedVariable is undefined");
16991699

17001700
if (!(declaration.flags & NodeFlags.Ambient) && !isBlockScopedNameDeclaredBeforeUse(declaration, errorLocation)) {
17011701
if (result.flags & SymbolFlags.BlockScopedVariable) {
@@ -1962,16 +1962,15 @@ namespace ts {
19621962
* Indicates that a symbol is an alias that does not merge with a local declaration.
19631963
* OR Is a JSContainer which may merge an alias with a local declaration
19641964
*/
1965-
function isNonLocalAlias(symbol: Symbol | undefined, excludes = SymbolFlags.Value | SymbolFlags.Type | SymbolFlags.Namespace) {
1965+
function isNonLocalAlias(symbol: Symbol | undefined, excludes = SymbolFlags.Value | SymbolFlags.Type | SymbolFlags.Namespace): symbol is Symbol {
19661966
if (!symbol) return false;
1967-
return (symbol.flags & (SymbolFlags.Alias | excludes)) === SymbolFlags.Alias || (symbol.flags & SymbolFlags.Alias && symbol.flags & SymbolFlags.JSContainer);
1967+
return (symbol.flags & (SymbolFlags.Alias | excludes)) === SymbolFlags.Alias || !!(symbol.flags & SymbolFlags.Alias && symbol.flags & SymbolFlags.JSContainer);
19681968
}
19691969

19701970
function resolveSymbol(symbol: Symbol, dontResolveAlias?: boolean): Symbol;
19711971
function resolveSymbol(symbol: Symbol | undefined, dontResolveAlias?: boolean): Symbol | undefined;
19721972
function resolveSymbol(symbol: Symbol | undefined, dontResolveAlias?: boolean): Symbol | undefined {
1973-
const shouldResolve = !dontResolveAlias && isNonLocalAlias(symbol);
1974-
return shouldResolve ? resolveAlias(symbol!) : symbol;
1973+
return !dontResolveAlias && isNonLocalAlias(symbol) ? resolveAlias(symbol) : symbol;
19751974
}
19761975

19771976
function resolveAlias(symbol: Symbol): Symbol {
@@ -26100,7 +26099,7 @@ namespace ts {
2610026099
// We should only get the declaration of an alias if there isn't a local value
2610126100
// declaration for the symbol
2610226101
if (isNonLocalAlias(symbol, /*excludes*/ SymbolFlags.Value)) {
26103-
return getDeclarationOfAliasSymbol(symbol!);
26102+
return getDeclarationOfAliasSymbol(symbol);
2610426103
}
2610526104
}
2610626105

0 commit comments

Comments
 (0)