From 990c682d7b7599d5a1871ca59e70e111da1c43d4 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Fri, 2 Feb 2024 10:26:50 -0800 Subject: [PATCH] Add test for issue 54655 --- .../declarationEmitArrowFunctionNoRenaming.js | 50 +++++++++++++++ ...arationEmitArrowFunctionNoRenaming.symbols | 64 +++++++++++++++++++ ...clarationEmitArrowFunctionNoRenaming.types | 46 +++++++++++++ .../declarationEmitArrowFunctionNoRenaming.ts | 24 +++++++ 4 files changed, 184 insertions(+) create mode 100644 tests/baselines/reference/declarationEmitArrowFunctionNoRenaming.js create mode 100644 tests/baselines/reference/declarationEmitArrowFunctionNoRenaming.symbols create mode 100644 tests/baselines/reference/declarationEmitArrowFunctionNoRenaming.types create mode 100644 tests/cases/compiler/declarationEmitArrowFunctionNoRenaming.ts diff --git a/tests/baselines/reference/declarationEmitArrowFunctionNoRenaming.js b/tests/baselines/reference/declarationEmitArrowFunctionNoRenaming.js new file mode 100644 index 0000000000000..7f01dec2e33e9 --- /dev/null +++ b/tests/baselines/reference/declarationEmitArrowFunctionNoRenaming.js @@ -0,0 +1,50 @@ +//// [tests/cases/compiler/declarationEmitArrowFunctionNoRenaming.ts] //// + +//// [declarationEmitArrowFunctionNoRenaming.ts] +export type Brand< + Base, + Branding, + ReservedName extends string = "__type__" +> = Base & { [K in ReservedName]: Branding } & { __witness__: Base }; + +export type BoundedInteger< + LowerBound extends number, + UpperBound extends number +> = Brand; + +export const toBoundedInteger = + (bounds: { + lowerBound: LowerBound; + upperBound: UpperBound; + }) => + ( + n: number + ): BoundedInteger => + // Implementation doesn't matter here + ({} as any) + + +//// [declarationEmitArrowFunctionNoRenaming.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.toBoundedInteger = void 0; +var toBoundedInteger = function (bounds) { + return function (n) { + // Implementation doesn't matter here + return ({}); + }; +}; +exports.toBoundedInteger = toBoundedInteger; + + +//// [declarationEmitArrowFunctionNoRenaming.d.ts] +export type Brand = Base & { + [K in ReservedName]: Branding; +} & { + __witness__: Base; +}; +export type BoundedInteger = Brand; +export declare const toBoundedInteger: (bounds: { + lowerBound: LowerBound; + upperBound: UpperBound; +}) => (n: number) => BoundedInteger; diff --git a/tests/baselines/reference/declarationEmitArrowFunctionNoRenaming.symbols b/tests/baselines/reference/declarationEmitArrowFunctionNoRenaming.symbols new file mode 100644 index 0000000000000..b9299f57efb14 --- /dev/null +++ b/tests/baselines/reference/declarationEmitArrowFunctionNoRenaming.symbols @@ -0,0 +1,64 @@ +//// [tests/cases/compiler/declarationEmitArrowFunctionNoRenaming.ts] //// + +=== declarationEmitArrowFunctionNoRenaming.ts === +export type Brand< +>Brand : Symbol(Brand, Decl(declarationEmitArrowFunctionNoRenaming.ts, 0, 0)) + + Base, +>Base : Symbol(Base, Decl(declarationEmitArrowFunctionNoRenaming.ts, 0, 18)) + + Branding, +>Branding : Symbol(Branding, Decl(declarationEmitArrowFunctionNoRenaming.ts, 1, 7)) + + ReservedName extends string = "__type__" +>ReservedName : Symbol(ReservedName, Decl(declarationEmitArrowFunctionNoRenaming.ts, 2, 11)) + +> = Base & { [K in ReservedName]: Branding } & { __witness__: Base }; +>Base : Symbol(Base, Decl(declarationEmitArrowFunctionNoRenaming.ts, 0, 18)) +>K : Symbol(K, Decl(declarationEmitArrowFunctionNoRenaming.ts, 4, 14)) +>ReservedName : Symbol(ReservedName, Decl(declarationEmitArrowFunctionNoRenaming.ts, 2, 11)) +>Branding : Symbol(Branding, Decl(declarationEmitArrowFunctionNoRenaming.ts, 1, 7)) +>__witness__ : Symbol(__witness__, Decl(declarationEmitArrowFunctionNoRenaming.ts, 4, 48)) +>Base : Symbol(Base, Decl(declarationEmitArrowFunctionNoRenaming.ts, 0, 18)) + +export type BoundedInteger< +>BoundedInteger : Symbol(BoundedInteger, Decl(declarationEmitArrowFunctionNoRenaming.ts, 4, 69)) + + LowerBound extends number, +>LowerBound : Symbol(LowerBound, Decl(declarationEmitArrowFunctionNoRenaming.ts, 6, 27)) + + UpperBound extends number +>UpperBound : Symbol(UpperBound, Decl(declarationEmitArrowFunctionNoRenaming.ts, 7, 28)) + +> = Brand; +>Brand : Symbol(Brand, Decl(declarationEmitArrowFunctionNoRenaming.ts, 0, 0)) + +export const toBoundedInteger = +>toBoundedInteger : Symbol(toBoundedInteger, Decl(declarationEmitArrowFunctionNoRenaming.ts, 11, 12)) + + (bounds: { +>LowerBound : Symbol(LowerBound, Decl(declarationEmitArrowFunctionNoRenaming.ts, 12, 3)) +>UpperBound : Symbol(UpperBound, Decl(declarationEmitArrowFunctionNoRenaming.ts, 12, 29)) +>bounds : Symbol(bounds, Decl(declarationEmitArrowFunctionNoRenaming.ts, 12, 57)) + + lowerBound: LowerBound; +>lowerBound : Symbol(lowerBound, Decl(declarationEmitArrowFunctionNoRenaming.ts, 12, 66)) +>LowerBound : Symbol(LowerBound, Decl(declarationEmitArrowFunctionNoRenaming.ts, 12, 3)) + + upperBound: UpperBound; +>upperBound : Symbol(upperBound, Decl(declarationEmitArrowFunctionNoRenaming.ts, 13, 27)) +>UpperBound : Symbol(UpperBound, Decl(declarationEmitArrowFunctionNoRenaming.ts, 12, 29)) + + }) => + ( + n: number +>n : Symbol(n, Decl(declarationEmitArrowFunctionNoRenaming.ts, 16, 3)) + + ): BoundedInteger => +>BoundedInteger : Symbol(BoundedInteger, Decl(declarationEmitArrowFunctionNoRenaming.ts, 4, 69)) +>LowerBound : Symbol(LowerBound, Decl(declarationEmitArrowFunctionNoRenaming.ts, 12, 3)) +>UpperBound : Symbol(UpperBound, Decl(declarationEmitArrowFunctionNoRenaming.ts, 12, 29)) + + // Implementation doesn't matter here + ({} as any) + diff --git a/tests/baselines/reference/declarationEmitArrowFunctionNoRenaming.types b/tests/baselines/reference/declarationEmitArrowFunctionNoRenaming.types new file mode 100644 index 0000000000000..a115515dccb2b --- /dev/null +++ b/tests/baselines/reference/declarationEmitArrowFunctionNoRenaming.types @@ -0,0 +1,46 @@ +//// [tests/cases/compiler/declarationEmitArrowFunctionNoRenaming.ts] //// + +=== declarationEmitArrowFunctionNoRenaming.ts === +export type Brand< +>Brand : Brand + + Base, + Branding, + ReservedName extends string = "__type__" +> = Base & { [K in ReservedName]: Branding } & { __witness__: Base }; +>__witness__ : Base + +export type BoundedInteger< +>BoundedInteger : BoundedInteger + + LowerBound extends number, + UpperBound extends number +> = Brand; + +export const toBoundedInteger = +>toBoundedInteger : (bounds: { lowerBound: LowerBound; upperBound: UpperBound;}) => (n: number) => BoundedInteger + + (bounds: { +>(bounds: { lowerBound: LowerBound; upperBound: UpperBound; }) => ( n: number ): BoundedInteger => // Implementation doesn't matter here ({} as any) : (bounds: { lowerBound: LowerBound; upperBound: UpperBound;}) => (n: number) => BoundedInteger +>bounds : { lowerBound: LowerBound; upperBound: UpperBound; } + + lowerBound: LowerBound; +>lowerBound : LowerBound + + upperBound: UpperBound; +>upperBound : UpperBound + + }) => + ( +>( n: number ): BoundedInteger => // Implementation doesn't matter here ({} as any) : (n: number) => BoundedInteger + + n: number +>n : number + + ): BoundedInteger => + // Implementation doesn't matter here + ({} as any) +>({} as any) : any +>{} as any : any +>{} : {} + diff --git a/tests/cases/compiler/declarationEmitArrowFunctionNoRenaming.ts b/tests/cases/compiler/declarationEmitArrowFunctionNoRenaming.ts new file mode 100644 index 0000000000000..0d464ba7a6db3 --- /dev/null +++ b/tests/cases/compiler/declarationEmitArrowFunctionNoRenaming.ts @@ -0,0 +1,24 @@ +// @strict: true +// @declaration: true + +export type Brand< + Base, + Branding, + ReservedName extends string = "__type__" +> = Base & { [K in ReservedName]: Branding } & { __witness__: Base }; + +export type BoundedInteger< + LowerBound extends number, + UpperBound extends number +> = Brand; + +export const toBoundedInteger = + (bounds: { + lowerBound: LowerBound; + upperBound: UpperBound; + }) => + ( + n: number + ): BoundedInteger => + // Implementation doesn't matter here + ({} as any)