Skip to content

Commit db823e3

Browse files
authored
Add test for issue 54655 (#57275)
1 parent 593af47 commit db823e3

File tree

4 files changed

+184
-0
lines changed

4 files changed

+184
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
//// [tests/cases/compiler/declarationEmitArrowFunctionNoRenaming.ts] ////
2+
3+
//// [declarationEmitArrowFunctionNoRenaming.ts]
4+
export type Brand<
5+
Base,
6+
Branding,
7+
ReservedName extends string = "__type__"
8+
> = Base & { [K in ReservedName]: Branding } & { __witness__: Base };
9+
10+
export type BoundedInteger<
11+
LowerBound extends number,
12+
UpperBound extends number
13+
> = Brand<number, "BoundedInteger">;
14+
15+
export const toBoundedInteger =
16+
<LowerBound extends number, UpperBound extends number>(bounds: {
17+
lowerBound: LowerBound;
18+
upperBound: UpperBound;
19+
}) =>
20+
(
21+
n: number
22+
): BoundedInteger<LowerBound, UpperBound> =>
23+
// Implementation doesn't matter here
24+
({} as any)
25+
26+
27+
//// [declarationEmitArrowFunctionNoRenaming.js]
28+
"use strict";
29+
Object.defineProperty(exports, "__esModule", { value: true });
30+
exports.toBoundedInteger = void 0;
31+
var toBoundedInteger = function (bounds) {
32+
return function (n) {
33+
// Implementation doesn't matter here
34+
return ({});
35+
};
36+
};
37+
exports.toBoundedInteger = toBoundedInteger;
38+
39+
40+
//// [declarationEmitArrowFunctionNoRenaming.d.ts]
41+
export type Brand<Base, Branding, ReservedName extends string = "__type__"> = Base & {
42+
[K in ReservedName]: Branding;
43+
} & {
44+
__witness__: Base;
45+
};
46+
export type BoundedInteger<LowerBound extends number, UpperBound extends number> = Brand<number, "BoundedInteger">;
47+
export declare const toBoundedInteger: <LowerBound extends number, UpperBound extends number>(bounds: {
48+
lowerBound: LowerBound;
49+
upperBound: UpperBound;
50+
}) => (n: number) => BoundedInteger<LowerBound, UpperBound>;
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
//// [tests/cases/compiler/declarationEmitArrowFunctionNoRenaming.ts] ////
2+
3+
=== declarationEmitArrowFunctionNoRenaming.ts ===
4+
export type Brand<
5+
>Brand : Symbol(Brand, Decl(declarationEmitArrowFunctionNoRenaming.ts, 0, 0))
6+
7+
Base,
8+
>Base : Symbol(Base, Decl(declarationEmitArrowFunctionNoRenaming.ts, 0, 18))
9+
10+
Branding,
11+
>Branding : Symbol(Branding, Decl(declarationEmitArrowFunctionNoRenaming.ts, 1, 7))
12+
13+
ReservedName extends string = "__type__"
14+
>ReservedName : Symbol(ReservedName, Decl(declarationEmitArrowFunctionNoRenaming.ts, 2, 11))
15+
16+
> = Base & { [K in ReservedName]: Branding } & { __witness__: Base };
17+
>Base : Symbol(Base, Decl(declarationEmitArrowFunctionNoRenaming.ts, 0, 18))
18+
>K : Symbol(K, Decl(declarationEmitArrowFunctionNoRenaming.ts, 4, 14))
19+
>ReservedName : Symbol(ReservedName, Decl(declarationEmitArrowFunctionNoRenaming.ts, 2, 11))
20+
>Branding : Symbol(Branding, Decl(declarationEmitArrowFunctionNoRenaming.ts, 1, 7))
21+
>__witness__ : Symbol(__witness__, Decl(declarationEmitArrowFunctionNoRenaming.ts, 4, 48))
22+
>Base : Symbol(Base, Decl(declarationEmitArrowFunctionNoRenaming.ts, 0, 18))
23+
24+
export type BoundedInteger<
25+
>BoundedInteger : Symbol(BoundedInteger, Decl(declarationEmitArrowFunctionNoRenaming.ts, 4, 69))
26+
27+
LowerBound extends number,
28+
>LowerBound : Symbol(LowerBound, Decl(declarationEmitArrowFunctionNoRenaming.ts, 6, 27))
29+
30+
UpperBound extends number
31+
>UpperBound : Symbol(UpperBound, Decl(declarationEmitArrowFunctionNoRenaming.ts, 7, 28))
32+
33+
> = Brand<number, "BoundedInteger">;
34+
>Brand : Symbol(Brand, Decl(declarationEmitArrowFunctionNoRenaming.ts, 0, 0))
35+
36+
export const toBoundedInteger =
37+
>toBoundedInteger : Symbol(toBoundedInteger, Decl(declarationEmitArrowFunctionNoRenaming.ts, 11, 12))
38+
39+
<LowerBound extends number, UpperBound extends number>(bounds: {
40+
>LowerBound : Symbol(LowerBound, Decl(declarationEmitArrowFunctionNoRenaming.ts, 12, 3))
41+
>UpperBound : Symbol(UpperBound, Decl(declarationEmitArrowFunctionNoRenaming.ts, 12, 29))
42+
>bounds : Symbol(bounds, Decl(declarationEmitArrowFunctionNoRenaming.ts, 12, 57))
43+
44+
lowerBound: LowerBound;
45+
>lowerBound : Symbol(lowerBound, Decl(declarationEmitArrowFunctionNoRenaming.ts, 12, 66))
46+
>LowerBound : Symbol(LowerBound, Decl(declarationEmitArrowFunctionNoRenaming.ts, 12, 3))
47+
48+
upperBound: UpperBound;
49+
>upperBound : Symbol(upperBound, Decl(declarationEmitArrowFunctionNoRenaming.ts, 13, 27))
50+
>UpperBound : Symbol(UpperBound, Decl(declarationEmitArrowFunctionNoRenaming.ts, 12, 29))
51+
52+
}) =>
53+
(
54+
n: number
55+
>n : Symbol(n, Decl(declarationEmitArrowFunctionNoRenaming.ts, 16, 3))
56+
57+
): BoundedInteger<LowerBound, UpperBound> =>
58+
>BoundedInteger : Symbol(BoundedInteger, Decl(declarationEmitArrowFunctionNoRenaming.ts, 4, 69))
59+
>LowerBound : Symbol(LowerBound, Decl(declarationEmitArrowFunctionNoRenaming.ts, 12, 3))
60+
>UpperBound : Symbol(UpperBound, Decl(declarationEmitArrowFunctionNoRenaming.ts, 12, 29))
61+
62+
// Implementation doesn't matter here
63+
({} as any)
64+
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
//// [tests/cases/compiler/declarationEmitArrowFunctionNoRenaming.ts] ////
2+
3+
=== declarationEmitArrowFunctionNoRenaming.ts ===
4+
export type Brand<
5+
>Brand : Brand<Base, Branding, ReservedName>
6+
7+
Base,
8+
Branding,
9+
ReservedName extends string = "__type__"
10+
> = Base & { [K in ReservedName]: Branding } & { __witness__: Base };
11+
>__witness__ : Base
12+
13+
export type BoundedInteger<
14+
>BoundedInteger : BoundedInteger<LowerBound, UpperBound>
15+
16+
LowerBound extends number,
17+
UpperBound extends number
18+
> = Brand<number, "BoundedInteger">;
19+
20+
export const toBoundedInteger =
21+
>toBoundedInteger : <LowerBound extends number, UpperBound extends number>(bounds: { lowerBound: LowerBound; upperBound: UpperBound;}) => (n: number) => BoundedInteger<LowerBound, UpperBound>
22+
23+
<LowerBound extends number, UpperBound extends number>(bounds: {
24+
><LowerBound extends number, UpperBound extends number>(bounds: { lowerBound: LowerBound; upperBound: UpperBound; }) => ( n: number ): BoundedInteger<LowerBound, UpperBound> => // Implementation doesn't matter here ({} as any) : <LowerBound extends number, UpperBound extends number>(bounds: { lowerBound: LowerBound; upperBound: UpperBound;}) => (n: number) => BoundedInteger<LowerBound, UpperBound>
25+
>bounds : { lowerBound: LowerBound; upperBound: UpperBound; }
26+
27+
lowerBound: LowerBound;
28+
>lowerBound : LowerBound
29+
30+
upperBound: UpperBound;
31+
>upperBound : UpperBound
32+
33+
}) =>
34+
(
35+
>( n: number ): BoundedInteger<LowerBound, UpperBound> => // Implementation doesn't matter here ({} as any) : (n: number) => BoundedInteger<LowerBound, UpperBound>
36+
37+
n: number
38+
>n : number
39+
40+
): BoundedInteger<LowerBound, UpperBound> =>
41+
// Implementation doesn't matter here
42+
({} as any)
43+
>({} as any) : any
44+
>{} as any : any
45+
>{} : {}
46+
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// @strict: true
2+
// @declaration: true
3+
4+
export type Brand<
5+
Base,
6+
Branding,
7+
ReservedName extends string = "__type__"
8+
> = Base & { [K in ReservedName]: Branding } & { __witness__: Base };
9+
10+
export type BoundedInteger<
11+
LowerBound extends number,
12+
UpperBound extends number
13+
> = Brand<number, "BoundedInteger">;
14+
15+
export const toBoundedInteger =
16+
<LowerBound extends number, UpperBound extends number>(bounds: {
17+
lowerBound: LowerBound;
18+
upperBound: UpperBound;
19+
}) =>
20+
(
21+
n: number
22+
): BoundedInteger<LowerBound, UpperBound> =>
23+
// Implementation doesn't matter here
24+
({} as any)

0 commit comments

Comments
 (0)