diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index b23462ed4f3b9..8066ad0de2e70 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -6311,7 +6311,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } } - function isEntityNameVisible(entityName: EntityNameOrEntityNameExpression, enclosingDeclaration: Node): SymbolVisibilityResult { + function getMeaningOfEntityNameReference(entityName: EntityNameOrEntityNameExpression): SymbolFlags { // get symbol of the first identifier of the entityName let meaning: SymbolFlags; if ( @@ -6324,7 +6324,10 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { } else if ( entityName.kind === SyntaxKind.QualifiedName || entityName.kind === SyntaxKind.PropertyAccessExpression || - entityName.parent.kind === SyntaxKind.ImportEqualsDeclaration + entityName.parent.kind === SyntaxKind.ImportEqualsDeclaration || + (entityName.parent.kind === SyntaxKind.QualifiedName && (entityName.parent as QualifiedName).left === entityName) || + (entityName.parent.kind === SyntaxKind.PropertyAccessExpression && (entityName.parent as PropertyAccessExpression).expression === entityName) || + (entityName.parent.kind === SyntaxKind.ElementAccessExpression && (entityName.parent as ElementAccessExpression).expression === entityName) ) { // Left identifier from type reference or TypeAlias // Entity name of the import declaration @@ -6334,7 +6337,11 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { // Type Reference or TypeAlias entity = Identifier meaning = SymbolFlags.Type; } + return meaning; + } + function isEntityNameVisible(entityName: EntityNameOrEntityNameExpression, enclosingDeclaration: Node): SymbolVisibilityResult { + const meaning = getMeaningOfEntityNameReference(entityName); const firstIdentifier = getFirstIdentifier(entityName); const symbol = resolveName(enclosingDeclaration, firstIdentifier.escapedText, meaning, /*nameNotFoundMessage*/ undefined, /*nameArg*/ undefined, /*isUse*/ false); if (symbol && symbol.flags & SymbolFlags.TypeParameter && meaning & SymbolFlags.Type) { @@ -8579,15 +8586,16 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { introducesError = true; return { introducesError, node }; } - const sym = resolveEntityName(leftmost, SymbolFlags.All, /*ignoreErrors*/ true, /*dontResolveAlias*/ true); + const meaning = getMeaningOfEntityNameReference(node); + const sym = resolveEntityName(leftmost, meaning, /*ignoreErrors*/ true, /*dontResolveAlias*/ true); if (sym) { - if (isSymbolAccessible(sym, context.enclosingDeclaration, SymbolFlags.All, /*shouldComputeAliasesToMakeVisible*/ false).accessibility !== SymbolAccessibility.Accessible) { + if (isSymbolAccessible(sym, context.enclosingDeclaration, meaning, /*shouldComputeAliasesToMakeVisible*/ false).accessibility !== SymbolAccessibility.Accessible) { if (!isDeclarationName(node)) { introducesError = true; } } else { - context.tracker.trackSymbol(sym, context.enclosingDeclaration, SymbolFlags.All); + context.tracker.trackSymbol(sym, context.enclosingDeclaration, meaning); includePrivateSymbol?.(sym); } if (isIdentifier(node)) { diff --git a/tests/baselines/reference/declarationEmitGlobalThisPreserved.types b/tests/baselines/reference/declarationEmitGlobalThisPreserved.types index d1df7e2f893fa..3c813484cc652 100644 --- a/tests/baselines/reference/declarationEmitGlobalThisPreserved.types +++ b/tests/baselines/reference/declarationEmitGlobalThisPreserved.types @@ -11,8 +11,8 @@ // Broken inference cases. export const a1 = (isNaN: typeof globalThis.isNaN): typeof globalThis.isNaN => isNaN; ->a1 : (isNaN: (number: number) => boolean) => (number: number) => boolean ->(isNaN: typeof globalThis.isNaN): typeof globalThis.isNaN => isNaN : (isNaN: (number: number) => boolean) => (number: number) => boolean +>a1 : (isNaN: typeof globalThis.isNaN) => typeof globalThis.isNaN +>(isNaN: typeof globalThis.isNaN): typeof globalThis.isNaN => isNaN : (isNaN: typeof globalThis.isNaN) => typeof globalThis.isNaN >isNaN : (number: number) => boolean >globalThis.isNaN : (number: number) => boolean >globalThis : typeof globalThis @@ -23,8 +23,8 @@ export const a1 = (isNaN: typeof globalThis.isNaN): typeof globalThis.isNaN => i >isNaN : (number: number) => boolean export const a2 = (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN): typeof globalThis.isNaN => bar ?? isNaN; ->a2 : (isNaN: (number: number) => boolean, bar?: (number: number) => boolean) => (number: number) => boolean ->(isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN): typeof globalThis.isNaN => bar ?? isNaN : (isNaN: (number: number) => boolean, bar?: (number: number) => boolean) => (number: number) => boolean +>a2 : (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) => typeof globalThis.isNaN +>(isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN): typeof globalThis.isNaN => bar ?? isNaN : (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) => typeof globalThis.isNaN >isNaN : (number: number) => boolean >globalThis.isNaN : (number: number) => boolean >globalThis : typeof globalThis @@ -41,8 +41,8 @@ export const a2 = (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN >isNaN : (number: number) => boolean export const a3 = (isNaN: number, bar: typeof globalThis.isNaN): typeof globalThis.isNaN => bar; ->a3 : (isNaN: number, bar: (number: number) => boolean) => (number: number) => boolean ->(isNaN: number, bar: typeof globalThis.isNaN): typeof globalThis.isNaN => bar : (isNaN: number, bar: (number: number) => boolean) => (number: number) => boolean +>a3 : (isNaN: number, bar: typeof globalThis.isNaN) => typeof globalThis.isNaN +>(isNaN: number, bar: typeof globalThis.isNaN): typeof globalThis.isNaN => bar : (isNaN: number, bar: typeof globalThis.isNaN) => typeof globalThis.isNaN >isNaN : number >bar : (number: number) => boolean >globalThis.isNaN : (number: number) => boolean @@ -54,8 +54,8 @@ export const a3 = (isNaN: number, bar: typeof globalThis.isNaN): typeof globalTh >bar : (number: number) => boolean export const a4 = (isNaN: number): typeof globalThis.isNaN => globalThis.isNaN; ->a4 : (isNaN: number) => (number: number) => boolean ->(isNaN: number): typeof globalThis.isNaN => globalThis.isNaN : (isNaN: number) => (number: number) => boolean +>a4 : (isNaN: number) => typeof globalThis.isNaN +>(isNaN: number): typeof globalThis.isNaN => globalThis.isNaN : (isNaN: number) => typeof globalThis.isNaN >isNaN : number >globalThis.isNaN : (number: number) => boolean >globalThis : typeof globalThis @@ -65,12 +65,12 @@ export const a4 = (isNaN: number): typeof globalThis.isNaN => globalThis.isNaN; >isNaN : (number: number) => boolean export const aObj = { ->aObj : { a1: (isNaN: (number: number) => boolean) => (number: number) => boolean; a2: (isNaN: (number: number) => boolean, bar?: (number: number) => boolean) => (number: number) => boolean; a3: (isNaN: number, bar: (number: number) => boolean) => (number: number) => boolean; a4: (isNaN: number) => (number: number) => boolean; } ->{ a1: (isNaN: typeof globalThis.isNaN): typeof globalThis.isNaN => isNaN, a2: (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN): typeof globalThis.isNaN => bar ?? isNaN, a3: (isNaN: number, bar: typeof globalThis.isNaN): typeof globalThis.isNaN => bar, a4: (isNaN: number): typeof globalThis.isNaN => globalThis.isNaN,} : { a1: (isNaN: (number: number) => boolean) => (number: number) => boolean; a2: (isNaN: (number: number) => boolean, bar?: (number: number) => boolean) => (number: number) => boolean; a3: (isNaN: number, bar: (number: number) => boolean) => (number: number) => boolean; a4: (isNaN: number) => (number: number) => boolean; } +>aObj : { a1: (isNaN: typeof globalThis.isNaN) => typeof globalThis.isNaN; a2: (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) => typeof globalThis.isNaN; a3: (isNaN: number, bar: typeof globalThis.isNaN) => typeof globalThis.isNaN; a4: (isNaN: number) => typeof globalThis.isNaN; } +>{ a1: (isNaN: typeof globalThis.isNaN): typeof globalThis.isNaN => isNaN, a2: (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN): typeof globalThis.isNaN => bar ?? isNaN, a3: (isNaN: number, bar: typeof globalThis.isNaN): typeof globalThis.isNaN => bar, a4: (isNaN: number): typeof globalThis.isNaN => globalThis.isNaN,} : { a1: (isNaN: typeof globalThis.isNaN) => typeof globalThis.isNaN; a2: (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) => typeof globalThis.isNaN; a3: (isNaN: number, bar: typeof globalThis.isNaN) => typeof globalThis.isNaN; a4: (isNaN: number) => typeof globalThis.isNaN; } a1: (isNaN: typeof globalThis.isNaN): typeof globalThis.isNaN => isNaN, ->a1 : (isNaN: (number: number) => boolean) => (number: number) => boolean ->(isNaN: typeof globalThis.isNaN): typeof globalThis.isNaN => isNaN : (isNaN: (number: number) => boolean) => (number: number) => boolean +>a1 : (isNaN: typeof globalThis.isNaN) => typeof globalThis.isNaN +>(isNaN: typeof globalThis.isNaN): typeof globalThis.isNaN => isNaN : (isNaN: typeof globalThis.isNaN) => typeof globalThis.isNaN >isNaN : (number: number) => boolean >globalThis.isNaN : (number: number) => boolean >globalThis : typeof globalThis @@ -81,8 +81,8 @@ export const aObj = { >isNaN : (number: number) => boolean a2: (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN): typeof globalThis.isNaN => bar ?? isNaN, ->a2 : (isNaN: (number: number) => boolean, bar?: (number: number) => boolean) => (number: number) => boolean ->(isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN): typeof globalThis.isNaN => bar ?? isNaN : (isNaN: (number: number) => boolean, bar?: (number: number) => boolean) => (number: number) => boolean +>a2 : (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) => typeof globalThis.isNaN +>(isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN): typeof globalThis.isNaN => bar ?? isNaN : (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) => typeof globalThis.isNaN >isNaN : (number: number) => boolean >globalThis.isNaN : (number: number) => boolean >globalThis : typeof globalThis @@ -99,8 +99,8 @@ export const aObj = { >isNaN : (number: number) => boolean a3: (isNaN: number, bar: typeof globalThis.isNaN): typeof globalThis.isNaN => bar, ->a3 : (isNaN: number, bar: (number: number) => boolean) => (number: number) => boolean ->(isNaN: number, bar: typeof globalThis.isNaN): typeof globalThis.isNaN => bar : (isNaN: number, bar: (number: number) => boolean) => (number: number) => boolean +>a3 : (isNaN: number, bar: typeof globalThis.isNaN) => typeof globalThis.isNaN +>(isNaN: number, bar: typeof globalThis.isNaN): typeof globalThis.isNaN => bar : (isNaN: number, bar: typeof globalThis.isNaN) => typeof globalThis.isNaN >isNaN : number >bar : (number: number) => boolean >globalThis.isNaN : (number: number) => boolean @@ -112,8 +112,8 @@ export const aObj = { >bar : (number: number) => boolean a4: (isNaN: number): typeof globalThis.isNaN => globalThis.isNaN, ->a4 : (isNaN: number) => (number: number) => boolean ->(isNaN: number): typeof globalThis.isNaN => globalThis.isNaN : (isNaN: number) => (number: number) => boolean +>a4 : (isNaN: number) => typeof globalThis.isNaN +>(isNaN: number): typeof globalThis.isNaN => globalThis.isNaN : (isNaN: number) => typeof globalThis.isNaN >isNaN : number >globalThis.isNaN : (number: number) => boolean >globalThis : typeof globalThis @@ -132,8 +132,8 @@ export type a4oReturn = ReturnType>; >aObj : { a1: (isNaN: (number: number) => boolean) => (number: number) => boolean; a2: (isNaN: (number: number) => boolean, bar?: (number: number) => boolean) => (number: number) => boolean; a3: (isNaN: number, bar: (number: number) => boolean) => (number: number) => boolean; a4: (isNaN: number) => (number: number) => boolean; } export const b1 = (isNaN: typeof globalThis.isNaN) => isNaN; ->b1 : (isNaN: (number: number) => boolean) => (number: number) => boolean ->(isNaN: typeof globalThis.isNaN) => isNaN : (isNaN: (number: number) => boolean) => (number: number) => boolean +>b1 : (isNaN: typeof globalThis.isNaN) => (number: number) => boolean +>(isNaN: typeof globalThis.isNaN) => isNaN : (isNaN: typeof globalThis.isNaN) => (number: number) => boolean >isNaN : (number: number) => boolean >globalThis.isNaN : (number: number) => boolean >globalThis : typeof globalThis @@ -141,8 +141,8 @@ export const b1 = (isNaN: typeof globalThis.isNaN) => isNaN; >isNaN : (number: number) => boolean export const b2 = (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) => bar ?? isNaN; ->b2 : (isNaN: (number: number) => boolean, bar?: (number: number) => boolean) => (number: number) => boolean ->(isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) => bar ?? isNaN : (isNaN: (number: number) => boolean, bar?: (number: number) => boolean) => (number: number) => boolean +>b2 : (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) => (number: number) => boolean +>(isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) => bar ?? isNaN : (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) => (number: number) => boolean >isNaN : (number: number) => boolean >globalThis.isNaN : (number: number) => boolean >globalThis : typeof globalThis @@ -156,8 +156,8 @@ export const b2 = (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN >isNaN : (number: number) => boolean export const b3 = (isNaN: number, bar: typeof globalThis.isNaN) => bar; ->b3 : (isNaN: number, bar: (number: number) => boolean) => (number: number) => boolean ->(isNaN: number, bar: typeof globalThis.isNaN) => bar : (isNaN: number, bar: (number: number) => boolean) => (number: number) => boolean +>b3 : (isNaN: number, bar: typeof globalThis.isNaN) => (number: number) => boolean +>(isNaN: number, bar: typeof globalThis.isNaN) => bar : (isNaN: number, bar: typeof globalThis.isNaN) => (number: number) => boolean >isNaN : number >bar : (number: number) => boolean >globalThis.isNaN : (number: number) => boolean @@ -174,12 +174,12 @@ export const b4 = (isNaN: number) => globalThis.isNaN; >isNaN : (number: number) => boolean export const bObj = { ->bObj : { b1: (isNaN: (number: number) => boolean) => (number: number) => boolean; b2: (isNaN: (number: number) => boolean, bar?: (number: number) => boolean) => (number: number) => boolean; b3: (isNaN: number, bar: (number: number) => boolean) => (number: number) => boolean; b4: (isNaN: number) => (number: number) => boolean; } ->{ b1: (isNaN: typeof globalThis.isNaN) => isNaN, b2: (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) => bar ?? isNaN, b3: (isNaN: number, bar: typeof globalThis.isNaN) => bar, b4: (isNaN: number) => globalThis.isNaN,} : { b1: (isNaN: (number: number) => boolean) => (number: number) => boolean; b2: (isNaN: (number: number) => boolean, bar?: (number: number) => boolean) => (number: number) => boolean; b3: (isNaN: number, bar: (number: number) => boolean) => (number: number) => boolean; b4: (isNaN: number) => (number: number) => boolean; } +>bObj : { b1: (isNaN: typeof globalThis.isNaN) => (number: number) => boolean; b2: (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) => (number: number) => boolean; b3: (isNaN: number, bar: typeof globalThis.isNaN) => (number: number) => boolean; b4: (isNaN: number) => (number: number) => boolean; } +>{ b1: (isNaN: typeof globalThis.isNaN) => isNaN, b2: (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) => bar ?? isNaN, b3: (isNaN: number, bar: typeof globalThis.isNaN) => bar, b4: (isNaN: number) => globalThis.isNaN,} : { b1: (isNaN: typeof globalThis.isNaN) => (number: number) => boolean; b2: (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) => (number: number) => boolean; b3: (isNaN: number, bar: typeof globalThis.isNaN) => (number: number) => boolean; b4: (isNaN: number) => (number: number) => boolean; } b1: (isNaN: typeof globalThis.isNaN) => isNaN, ->b1 : (isNaN: (number: number) => boolean) => (number: number) => boolean ->(isNaN: typeof globalThis.isNaN) => isNaN : (isNaN: (number: number) => boolean) => (number: number) => boolean +>b1 : (isNaN: typeof globalThis.isNaN) => (number: number) => boolean +>(isNaN: typeof globalThis.isNaN) => isNaN : (isNaN: typeof globalThis.isNaN) => (number: number) => boolean >isNaN : (number: number) => boolean >globalThis.isNaN : (number: number) => boolean >globalThis : typeof globalThis @@ -187,8 +187,8 @@ export const bObj = { >isNaN : (number: number) => boolean b2: (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) => bar ?? isNaN, ->b2 : (isNaN: (number: number) => boolean, bar?: (number: number) => boolean) => (number: number) => boolean ->(isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) => bar ?? isNaN : (isNaN: (number: number) => boolean, bar?: (number: number) => boolean) => (number: number) => boolean +>b2 : (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) => (number: number) => boolean +>(isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) => bar ?? isNaN : (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) => (number: number) => boolean >isNaN : (number: number) => boolean >globalThis.isNaN : (number: number) => boolean >globalThis : typeof globalThis @@ -202,8 +202,8 @@ export const bObj = { >isNaN : (number: number) => boolean b3: (isNaN: number, bar: typeof globalThis.isNaN) => bar, ->b3 : (isNaN: number, bar: (number: number) => boolean) => (number: number) => boolean ->(isNaN: number, bar: typeof globalThis.isNaN) => bar : (isNaN: number, bar: (number: number) => boolean) => (number: number) => boolean +>b3 : (isNaN: number, bar: typeof globalThis.isNaN) => (number: number) => boolean +>(isNaN: number, bar: typeof globalThis.isNaN) => bar : (isNaN: number, bar: typeof globalThis.isNaN) => (number: number) => boolean >isNaN : number >bar : (number: number) => boolean >globalThis.isNaN : (number: number) => boolean @@ -267,11 +267,11 @@ export function c4(isNaN: number) { return globalThis.isNaN; } >isNaN : (number: number) => boolean export const cObj = { ->cObj : { c1(isNaN: (number: number) => boolean): (number: number) => boolean; c2(isNaN: (number: number) => boolean, bar?: (number: number) => boolean): (number: number) => boolean; c3(isNaN: number, bar: (number: number) => boolean): (number: number) => boolean; c4(isNaN: number): (number: number) => boolean; } ->{ c1(isNaN: typeof globalThis.isNaN) { return isNaN }, c2(isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) { return bar ?? isNaN }, c3(isNaN: number, bar: typeof globalThis.isNaN) { return bar }, c4(isNaN: number) { return globalThis.isNaN; },} : { c1(isNaN: (number: number) => boolean): (number: number) => boolean; c2(isNaN: (number: number) => boolean, bar?: (number: number) => boolean): (number: number) => boolean; c3(isNaN: number, bar: (number: number) => boolean): (number: number) => boolean; c4(isNaN: number): (number: number) => boolean; } +>cObj : { c1(isNaN: typeof globalThis.isNaN): (number: number) => boolean; c2(isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN): (number: number) => boolean; c3(isNaN: number, bar: typeof globalThis.isNaN): (number: number) => boolean; c4(isNaN: number): (number: number) => boolean; } +>{ c1(isNaN: typeof globalThis.isNaN) { return isNaN }, c2(isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) { return bar ?? isNaN }, c3(isNaN: number, bar: typeof globalThis.isNaN) { return bar }, c4(isNaN: number) { return globalThis.isNaN; },} : { c1(isNaN: typeof globalThis.isNaN): (number: number) => boolean; c2(isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN): (number: number) => boolean; c3(isNaN: number, bar: typeof globalThis.isNaN): (number: number) => boolean; c4(isNaN: number): (number: number) => boolean; } c1(isNaN: typeof globalThis.isNaN) { return isNaN }, ->c1 : (isNaN: (number: number) => boolean) => (number: number) => boolean +>c1 : (isNaN: typeof globalThis.isNaN) => (number: number) => boolean >isNaN : (number: number) => boolean >globalThis.isNaN : (number: number) => boolean >globalThis : typeof globalThis @@ -279,7 +279,7 @@ export const cObj = { >isNaN : (number: number) => boolean c2(isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) { return bar ?? isNaN }, ->c2 : (isNaN: (number: number) => boolean, bar?: (number: number) => boolean) => (number: number) => boolean +>c2 : (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) => (number: number) => boolean >isNaN : (number: number) => boolean >globalThis.isNaN : (number: number) => boolean >globalThis : typeof globalThis @@ -293,7 +293,7 @@ export const cObj = { >isNaN : (number: number) => boolean c3(isNaN: number, bar: typeof globalThis.isNaN) { return bar }, ->c3 : (isNaN: number, bar: (number: number) => boolean) => (number: number) => boolean +>c3 : (isNaN: number, bar: typeof globalThis.isNaN) => (number: number) => boolean >isNaN : number >bar : (number: number) => boolean >globalThis.isNaN : (number: number) => boolean @@ -318,11 +318,11 @@ export type c4oReturn = ReturnType>; >cObj : { c1(isNaN: (number: number) => boolean): (number: number) => boolean; c2(isNaN: (number: number) => boolean, bar?: (number: number) => boolean): (number: number) => boolean; c3(isNaN: number, bar: (number: number) => boolean): (number: number) => boolean; c4(isNaN: number): (number: number) => boolean; } export function d1() { ->d1 : () => () => (isNaN: (number: number) => boolean) => (number: number) => boolean +>d1 : () => () => (isNaN: typeof globalThis.isNaN) => typeof globalThis.isNaN const fn = (isNaN: typeof globalThis.isNaN): typeof globalThis.isNaN => isNaN; ->fn : (isNaN: (number: number) => boolean) => (number: number) => boolean ->(isNaN: typeof globalThis.isNaN): typeof globalThis.isNaN => isNaN : (isNaN: (number: number) => boolean) => (number: number) => boolean +>fn : (isNaN: typeof globalThis.isNaN) => typeof globalThis.isNaN +>(isNaN: typeof globalThis.isNaN): typeof globalThis.isNaN => isNaN : (isNaN: typeof globalThis.isNaN) => typeof globalThis.isNaN >isNaN : (number: number) => boolean >globalThis.isNaN : (number: number) => boolean >globalThis : typeof globalThis @@ -338,11 +338,11 @@ export function d1() { } export function d2() { ->d2 : () => () => (isNaN: (number: number) => boolean, bar?: (number: number) => boolean) => (number: number) => boolean +>d2 : () => () => (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) => typeof globalThis.isNaN const fn = (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN): typeof globalThis.isNaN => bar ?? isNaN; ->fn : (isNaN: (number: number) => boolean, bar?: (number: number) => boolean) => (number: number) => boolean ->(isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN): typeof globalThis.isNaN => bar ?? isNaN : (isNaN: (number: number) => boolean, bar?: (number: number) => boolean) => (number: number) => boolean +>fn : (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) => typeof globalThis.isNaN +>(isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN): typeof globalThis.isNaN => bar ?? isNaN : (isNaN: typeof globalThis.isNaN, bar?: typeof globalThis.isNaN) => typeof globalThis.isNaN >isNaN : (number: number) => boolean >globalThis.isNaN : (number: number) => boolean >globalThis : typeof globalThis @@ -364,11 +364,11 @@ export function d2() { } export function d3() { ->d3 : () => () => (isNaN: number, bar: (number: number) => boolean) => (number: number) => boolean +>d3 : () => () => (isNaN: number, bar: typeof globalThis.isNaN) => typeof globalThis.isNaN const fn = (isNaN: number, bar: typeof globalThis.isNaN): typeof globalThis.isNaN => bar; ->fn : (isNaN: number, bar: (number: number) => boolean) => (number: number) => boolean ->(isNaN: number, bar: typeof globalThis.isNaN): typeof globalThis.isNaN => bar : (isNaN: number, bar: (number: number) => boolean) => (number: number) => boolean +>fn : (isNaN: number, bar: typeof globalThis.isNaN) => typeof globalThis.isNaN +>(isNaN: number, bar: typeof globalThis.isNaN): typeof globalThis.isNaN => bar : (isNaN: number, bar: typeof globalThis.isNaN) => typeof globalThis.isNaN >isNaN : number >bar : (number: number) => boolean >globalThis.isNaN : (number: number) => boolean @@ -385,11 +385,11 @@ export function d3() { } export function d4() { ->d4 : () => () => (isNaN: number) => (number: number) => boolean +>d4 : () => () => (isNaN: number) => typeof globalThis.isNaN const fn = (isNaN: number): typeof globalThis.isNaN => globalThis.isNaN; ->fn : (isNaN: number) => (number: number) => boolean ->(isNaN: number): typeof globalThis.isNaN => globalThis.isNaN : (isNaN: number) => (number: number) => boolean +>fn : (isNaN: number) => typeof globalThis.isNaN +>(isNaN: number): typeof globalThis.isNaN => globalThis.isNaN : (isNaN: number) => typeof globalThis.isNaN >isNaN : number >globalThis.isNaN : (number: number) => boolean >globalThis : typeof globalThis diff --git a/tests/baselines/reference/declarationEmitRetainedAnnotationRetainsImportInOutput.js b/tests/baselines/reference/declarationEmitRetainedAnnotationRetainsImportInOutput.js new file mode 100644 index 0000000000000..3bbe347a63e50 --- /dev/null +++ b/tests/baselines/reference/declarationEmitRetainedAnnotationRetainsImportInOutput.js @@ -0,0 +1,23 @@ +//// [tests/cases/compiler/declarationEmitRetainedAnnotationRetainsImportInOutput.ts] //// + +//// [index.d.ts] +export type Whatever = {x: T}; +export declare function something(cb: () => Whatever): Whatever; + +//// [index.ts] +import * as E from 'whatever'; + +export const run = (i: () => E.Whatever): E.Whatever => E.something(i); + +//// [index.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.run = void 0; +var E = require("whatever"); +var run = function (i) { return E.something(i); }; +exports.run = run; + + +//// [index.d.ts] +import * as E from 'whatever'; +export declare const run: (i: () => E.Whatever) => E.Whatever; diff --git a/tests/baselines/reference/declarationEmitRetainedAnnotationRetainsImportInOutput.symbols b/tests/baselines/reference/declarationEmitRetainedAnnotationRetainsImportInOutput.symbols new file mode 100644 index 0000000000000..4efb920d98b99 --- /dev/null +++ b/tests/baselines/reference/declarationEmitRetainedAnnotationRetainsImportInOutput.symbols @@ -0,0 +1,37 @@ +//// [tests/cases/compiler/declarationEmitRetainedAnnotationRetainsImportInOutput.ts] //// + +=== node_modules/whatever/index.d.ts === +export type Whatever = {x: T}; +>Whatever : Symbol(Whatever, Decl(index.d.ts, 0, 0)) +>T : Symbol(T, Decl(index.d.ts, 0, 21)) +>x : Symbol(x, Decl(index.d.ts, 0, 27)) +>T : Symbol(T, Decl(index.d.ts, 0, 21)) + +export declare function something(cb: () => Whatever): Whatever; +>something : Symbol(something, Decl(index.d.ts, 0, 33)) +>T : Symbol(T, Decl(index.d.ts, 1, 34)) +>cb : Symbol(cb, Decl(index.d.ts, 1, 37)) +>Whatever : Symbol(Whatever, Decl(index.d.ts, 0, 0)) +>T : Symbol(T, Decl(index.d.ts, 1, 34)) +>Whatever : Symbol(Whatever, Decl(index.d.ts, 0, 0)) +>T : Symbol(T, Decl(index.d.ts, 1, 34)) + +=== index.ts === +import * as E from 'whatever'; +>E : Symbol(E, Decl(index.ts, 0, 6)) + +export const run = (i: () => E.Whatever): E.Whatever => E.something(i); +>run : Symbol(run, Decl(index.ts, 2, 12)) +>E : Symbol(E, Decl(index.ts, 2, 20)) +>i : Symbol(i, Decl(index.ts, 2, 23)) +>E : Symbol(E, Decl(index.ts, 0, 6)) +>Whatever : Symbol(E.Whatever, Decl(index.d.ts, 0, 0)) +>E : Symbol(E, Decl(index.ts, 2, 20)) +>E : Symbol(E, Decl(index.ts, 0, 6)) +>Whatever : Symbol(E.Whatever, Decl(index.d.ts, 0, 0)) +>E : Symbol(E, Decl(index.ts, 2, 20)) +>E.something : Symbol(E.something, Decl(index.d.ts, 0, 33)) +>E : Symbol(E, Decl(index.ts, 0, 6)) +>something : Symbol(E.something, Decl(index.d.ts, 0, 33)) +>i : Symbol(i, Decl(index.ts, 2, 23)) + diff --git a/tests/baselines/reference/declarationEmitRetainedAnnotationRetainsImportInOutput.types b/tests/baselines/reference/declarationEmitRetainedAnnotationRetainsImportInOutput.types new file mode 100644 index 0000000000000..1051d467d4a2d --- /dev/null +++ b/tests/baselines/reference/declarationEmitRetainedAnnotationRetainsImportInOutput.types @@ -0,0 +1,27 @@ +//// [tests/cases/compiler/declarationEmitRetainedAnnotationRetainsImportInOutput.ts] //// + +=== node_modules/whatever/index.d.ts === +export type Whatever = {x: T}; +>Whatever : Whatever +>x : T + +export declare function something(cb: () => Whatever): Whatever; +>something : (cb: () => Whatever) => Whatever +>cb : () => Whatever + +=== index.ts === +import * as E from 'whatever'; +>E : typeof E + +export const run = (i: () => E.Whatever): E.Whatever => E.something(i); +>run : (i: () => E.Whatever) => E.Whatever +>(i: () => E.Whatever): E.Whatever => E.something(i) : (i: () => E.Whatever) => E.Whatever +>i : () => E.Whatever +>E : any +>E : any +>E.something(i) : E.Whatever +>E.something : (cb: () => E.Whatever) => E.Whatever +>E : typeof E +>something : (cb: () => E.Whatever) => E.Whatever +>i : () => E.Whatever + diff --git a/tests/baselines/reference/intraExpressionInferences.types b/tests/baselines/reference/intraExpressionInferences.types index 9f4d02b6b3ed9..fecbbbba069de 100644 --- a/tests/baselines/reference/intraExpressionInferences.types +++ b/tests/baselines/reference/intraExpressionInferences.types @@ -620,7 +620,7 @@ example({ // Repro from #45255 declare const branch: ->branch : (_: { test: T; if: (t: T) => t is U; then: (u: U) => void; }) => void +>branch : (_: { test: T; if: (t: T) => t is U; then: (u: U) => void;}) => void (_: { test: T, if: (t: T) => t is U, then: (u: U) => void }) => void >_ : { test: T; if: (t: T) => t is U; then: (u: U) => void; } diff --git a/tests/baselines/reference/jsDeclarationsImportAliasExposedWithinNamespace.js b/tests/baselines/reference/jsDeclarationsImportAliasExposedWithinNamespace.js index b600a72f5cd6b..f08a35dfa3a3d 100644 --- a/tests/baselines/reference/jsDeclarationsImportAliasExposedWithinNamespace.js +++ b/tests/baselines/reference/jsDeclarationsImportAliasExposedWithinNamespace.js @@ -67,10 +67,15 @@ export namespace myTypes { prop2: string; }; type typeC = myTypes.typeB | Function; - let myTypes: { - [x: string]: any; - }; } +/** + * @namespace myTypes + * @global + * @type {Object} + */ +export const myTypes: { + [x: string]: any; +}; //// [file2.d.ts] export namespace testFnTypes { type input = boolean | myTypes.typeC; diff --git a/tests/baselines/reference/reverseMappedUnionInference.types b/tests/baselines/reference/reverseMappedUnionInference.types index 6eb20a8c8ce1d..c2614e63d5593 100644 --- a/tests/baselines/reference/reverseMappedUnionInference.types +++ b/tests/baselines/reference/reverseMappedUnionInference.types @@ -22,7 +22,7 @@ interface Extractor { } declare function createExtractor(params: { ->createExtractor : (params: { matcher: (node: unknown) => node is T; extract: (node: T) => Result; }) => Extractor +>createExtractor : (params: { matcher: (node: unknown) => node is T; extract: (node: T) => Result;}) => Extractor >params : { matcher: (node: unknown) => node is T; extract: (node: T) => Result; } matcher: (node: unknown) => node is T; diff --git a/tests/cases/compiler/declarationEmitRetainedAnnotationRetainsImportInOutput.ts b/tests/cases/compiler/declarationEmitRetainedAnnotationRetainsImportInOutput.ts new file mode 100644 index 0000000000000..6ba10cbc49032 --- /dev/null +++ b/tests/cases/compiler/declarationEmitRetainedAnnotationRetainsImportInOutput.ts @@ -0,0 +1,10 @@ +// @strict: true +// @declaration: true +// @filename: node_modules/whatever/index.d.ts +export type Whatever = {x: T}; +export declare function something(cb: () => Whatever): Whatever; + +// @filename: index.ts +import * as E from 'whatever'; + +export const run = (i: () => E.Whatever): E.Whatever => E.something(i); \ No newline at end of file