Skip to content

Commit ce73b17

Browse files
authored
Treat BigInt type references in JSDoc as intended bigints (#60863)
1 parent 1c4083f commit ce73b17

File tree

8 files changed

+154
-42
lines changed

8 files changed

+154
-42
lines changed

src/compiler/checker.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16684,6 +16684,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1668416684
case "Number":
1668516685
checkNoTypeArguments(node);
1668616686
return numberType;
16687+
case "BigInt":
16688+
checkNoTypeArguments(node);
16689+
return bigintType;
1668716690
case "Boolean":
1668816691
checkNoTypeArguments(node);
1668916692
return booleanType;
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
//// [tests/cases/conformance/jsdoc/checkJsdocTypeTag8.ts] ////
2+
3+
=== index.js ===
4+
// https://github.com/microsoft/TypeScript/issues/57953
5+
6+
/**
7+
* @param {Number|BigInt} n
8+
*/
9+
function isLessThanFive(n) {
10+
>isLessThanFive : Symbol(isLessThanFive, Decl(index.js, 0, 0))
11+
>n : Symbol(n, Decl(index.js, 5, 24))
12+
13+
return n < 5;
14+
>n : Symbol(n, Decl(index.js, 5, 24))
15+
}
16+
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
//// [tests/cases/conformance/jsdoc/checkJsdocTypeTag8.ts] ////
2+
3+
=== index.js ===
4+
// https://github.com/microsoft/TypeScript/issues/57953
5+
6+
/**
7+
* @param {Number|BigInt} n
8+
*/
9+
function isLessThanFive(n) {
10+
>isLessThanFive : (n: number | bigint) => boolean
11+
> : ^ ^^^^^^^^ ^^^^^^^^^^^^^^^^^^
12+
>n : number | bigint
13+
> : ^^^^^^^^^^^^^^^
14+
15+
return n < 5;
16+
>n < 5 : boolean
17+
> : ^^^^^^^
18+
>n : number | bigint
19+
> : ^^^^^^^^^^^^^^^
20+
>5 : 5
21+
> : ^
22+
}
23+

tests/baselines/reference/jsdocTypeTag.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ var N;
1313
/** @type {number} */
1414
var n;
1515

16+
/** @type {BigInt} */
17+
var BI;
18+
19+
/** @type {bigint} */
20+
var bi;
21+
1622
/** @type {Boolean} */
1723
var B;
1824

@@ -74,6 +80,8 @@ var N: number;
7480
var n: number
7581
var B: boolean;
7682
var b: boolean;
83+
var BI: bigint;
84+
var bi: bigint;
7785
var V :void;
7886
var v: void;
7987
var U: undefined;
@@ -101,6 +109,10 @@ var s;
101109
var N;
102110
/** @type {number} */
103111
var n;
112+
/** @type {BigInt} */
113+
var BI;
114+
/** @type {bigint} */
115+
var bi;
104116
/** @type {Boolean} */
105117
var B;
106118
/** @type {boolean} */
@@ -144,6 +156,8 @@ var N;
144156
var n;
145157
var B;
146158
var b;
159+
var BI;
160+
var bi;
147161
var V;
148162
var v;
149163
var U;

tests/baselines/reference/jsdocTypeTag.symbols

Lines changed: 56 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -17,77 +17,85 @@ var N;
1717
var n;
1818
>n : Symbol(n, Decl(a.js, 10, 3), Decl(b.ts, 3, 3))
1919

20+
/** @type {BigInt} */
21+
var BI;
22+
>BI : Symbol(BI, Decl(a.js, 13, 3), Decl(b.ts, 6, 3))
23+
24+
/** @type {bigint} */
25+
var bi;
26+
>bi : Symbol(bi, Decl(a.js, 16, 3), Decl(b.ts, 7, 3))
27+
2028
/** @type {Boolean} */
2129
var B;
22-
>B : Symbol(B, Decl(a.js, 13, 3), Decl(b.ts, 4, 3))
30+
>B : Symbol(B, Decl(a.js, 19, 3), Decl(b.ts, 4, 3))
2331

2432
/** @type {boolean} */
2533
var b;
26-
>b : Symbol(b, Decl(a.js, 16, 3), Decl(b.ts, 5, 3))
34+
>b : Symbol(b, Decl(a.js, 22, 3), Decl(b.ts, 5, 3))
2735

2836
/** @type {Void} */
2937
var V;
30-
>V : Symbol(V, Decl(a.js, 19, 3), Decl(b.ts, 6, 3))
38+
>V : Symbol(V, Decl(a.js, 25, 3), Decl(b.ts, 8, 3))
3139

3240
/** @type {void} */
3341
var v;
34-
>v : Symbol(v, Decl(a.js, 22, 3), Decl(b.ts, 7, 3))
42+
>v : Symbol(v, Decl(a.js, 28, 3), Decl(b.ts, 9, 3))
3543

3644
/** @type {Undefined} */
3745
var U;
38-
>U : Symbol(U, Decl(a.js, 25, 3), Decl(b.ts, 8, 3))
46+
>U : Symbol(U, Decl(a.js, 31, 3), Decl(b.ts, 10, 3))
3947

4048
/** @type {undefined} */
4149
var u;
42-
>u : Symbol(u, Decl(a.js, 28, 3), Decl(b.ts, 9, 3))
50+
>u : Symbol(u, Decl(a.js, 34, 3), Decl(b.ts, 11, 3))
4351

4452
/** @type {Null} */
4553
var Nl;
46-
>Nl : Symbol(Nl, Decl(a.js, 31, 3), Decl(b.ts, 10, 3))
54+
>Nl : Symbol(Nl, Decl(a.js, 37, 3), Decl(b.ts, 12, 3))
4755

4856
/** @type {null} */
4957
var nl;
50-
>nl : Symbol(nl, Decl(a.js, 34, 3), Decl(b.ts, 11, 3))
58+
>nl : Symbol(nl, Decl(a.js, 40, 3), Decl(b.ts, 13, 3))
5159

5260
/** @type {Array} */
5361
var A;
54-
>A : Symbol(A, Decl(a.js, 37, 3), Decl(b.ts, 12, 3))
62+
>A : Symbol(A, Decl(a.js, 43, 3), Decl(b.ts, 14, 3))
5563

5664
/** @type {array} */
5765
var a;
58-
>a : Symbol(a, Decl(a.js, 40, 3), Decl(b.ts, 13, 3))
66+
>a : Symbol(a, Decl(a.js, 46, 3), Decl(b.ts, 15, 3))
5967

6068
/** @type {Promise} */
6169
var P;
62-
>P : Symbol(P, Decl(a.js, 43, 3), Decl(b.ts, 14, 3))
70+
>P : Symbol(P, Decl(a.js, 49, 3), Decl(b.ts, 16, 3))
6371

6472
/** @type {promise} */
6573
var p;
66-
>p : Symbol(p, Decl(a.js, 46, 3), Decl(b.ts, 15, 3))
74+
>p : Symbol(p, Decl(a.js, 52, 3), Decl(b.ts, 17, 3))
6775

6876
/** @type {?number} */
6977
var nullable;
70-
>nullable : Symbol(nullable, Decl(a.js, 49, 3), Decl(b.ts, 16, 3))
78+
>nullable : Symbol(nullable, Decl(a.js, 55, 3), Decl(b.ts, 18, 3))
7179

7280
/** @type {Object} */
7381
var Obj;
74-
>Obj : Symbol(Obj, Decl(a.js, 52, 3), Decl(b.ts, 17, 3))
82+
>Obj : Symbol(Obj, Decl(a.js, 58, 3), Decl(b.ts, 19, 3))
7583

7684
/** @type {object} */
7785
var obj;
78-
>obj : Symbol(obj, Decl(a.js, 55, 3), Decl(b.ts, 18, 3))
86+
>obj : Symbol(obj, Decl(a.js, 61, 3), Decl(b.ts, 20, 3))
7987

8088
/** @type {Function} */
8189
var Func;
82-
>Func : Symbol(Func, Decl(a.js, 58, 3), Decl(b.ts, 19, 3))
90+
>Func : Symbol(Func, Decl(a.js, 64, 3), Decl(b.ts, 21, 3))
8391

8492
/** @type {(s: string) => number} */
8593
var f;
86-
>f : Symbol(f, Decl(a.js, 61, 3), Decl(b.ts, 20, 3))
94+
>f : Symbol(f, Decl(a.js, 67, 3), Decl(b.ts, 22, 3))
8795

8896
/** @type {new (s: string) => { s: string }} */
8997
var ctor;
90-
>ctor : Symbol(ctor, Decl(a.js, 64, 3), Decl(b.ts, 21, 3))
98+
>ctor : Symbol(ctor, Decl(a.js, 70, 3), Decl(b.ts, 23, 3))
9199

92100
=== b.ts ===
93101
var S: string;
@@ -103,62 +111,68 @@ var n: number
103111
>n : Symbol(n, Decl(a.js, 10, 3), Decl(b.ts, 3, 3))
104112

105113
var B: boolean;
106-
>B : Symbol(B, Decl(a.js, 13, 3), Decl(b.ts, 4, 3))
114+
>B : Symbol(B, Decl(a.js, 19, 3), Decl(b.ts, 4, 3))
107115

108116
var b: boolean;
109-
>b : Symbol(b, Decl(a.js, 16, 3), Decl(b.ts, 5, 3))
117+
>b : Symbol(b, Decl(a.js, 22, 3), Decl(b.ts, 5, 3))
118+
119+
var BI: bigint;
120+
>BI : Symbol(BI, Decl(a.js, 13, 3), Decl(b.ts, 6, 3))
121+
122+
var bi: bigint;
123+
>bi : Symbol(bi, Decl(a.js, 16, 3), Decl(b.ts, 7, 3))
110124

111125
var V :void;
112-
>V : Symbol(V, Decl(a.js, 19, 3), Decl(b.ts, 6, 3))
126+
>V : Symbol(V, Decl(a.js, 25, 3), Decl(b.ts, 8, 3))
113127

114128
var v: void;
115-
>v : Symbol(v, Decl(a.js, 22, 3), Decl(b.ts, 7, 3))
129+
>v : Symbol(v, Decl(a.js, 28, 3), Decl(b.ts, 9, 3))
116130

117131
var U: undefined;
118-
>U : Symbol(U, Decl(a.js, 25, 3), Decl(b.ts, 8, 3))
132+
>U : Symbol(U, Decl(a.js, 31, 3), Decl(b.ts, 10, 3))
119133

120134
var u: undefined;
121-
>u : Symbol(u, Decl(a.js, 28, 3), Decl(b.ts, 9, 3))
135+
>u : Symbol(u, Decl(a.js, 34, 3), Decl(b.ts, 11, 3))
122136

123137
var Nl: null;
124-
>Nl : Symbol(Nl, Decl(a.js, 31, 3), Decl(b.ts, 10, 3))
138+
>Nl : Symbol(Nl, Decl(a.js, 37, 3), Decl(b.ts, 12, 3))
125139

126140
var nl: null;
127-
>nl : Symbol(nl, Decl(a.js, 34, 3), Decl(b.ts, 11, 3))
141+
>nl : Symbol(nl, Decl(a.js, 40, 3), Decl(b.ts, 13, 3))
128142

129143
var A: any[];
130-
>A : Symbol(A, Decl(a.js, 37, 3), Decl(b.ts, 12, 3))
144+
>A : Symbol(A, Decl(a.js, 43, 3), Decl(b.ts, 14, 3))
131145

132146
var a: any[];
133-
>a : Symbol(a, Decl(a.js, 40, 3), Decl(b.ts, 13, 3))
147+
>a : Symbol(a, Decl(a.js, 46, 3), Decl(b.ts, 15, 3))
134148

135149
var P: Promise<any>;
136-
>P : Symbol(P, Decl(a.js, 43, 3), Decl(b.ts, 14, 3))
137-
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --))
150+
>P : Symbol(P, Decl(a.js, 49, 3), Decl(b.ts, 16, 3))
151+
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --))
138152

139153
var p: Promise<any>;
140-
>p : Symbol(p, Decl(a.js, 46, 3), Decl(b.ts, 15, 3))
141-
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --))
154+
>p : Symbol(p, Decl(a.js, 52, 3), Decl(b.ts, 17, 3))
155+
>Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.promise.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.es2018.promise.d.ts, --, --))
142156

143157
var nullable: number | null;
144-
>nullable : Symbol(nullable, Decl(a.js, 49, 3), Decl(b.ts, 16, 3))
158+
>nullable : Symbol(nullable, Decl(a.js, 55, 3), Decl(b.ts, 18, 3))
145159

146160
var Obj: any;
147-
>Obj : Symbol(Obj, Decl(a.js, 52, 3), Decl(b.ts, 17, 3))
161+
>Obj : Symbol(Obj, Decl(a.js, 58, 3), Decl(b.ts, 19, 3))
148162

149163
var obj: any;
150-
>obj : Symbol(obj, Decl(a.js, 55, 3), Decl(b.ts, 18, 3))
164+
>obj : Symbol(obj, Decl(a.js, 61, 3), Decl(b.ts, 20, 3))
151165

152166
var Func: Function;
153-
>Func : Symbol(Func, Decl(a.js, 58, 3), Decl(b.ts, 19, 3))
154-
>Function : Symbol(Function, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
167+
>Func : Symbol(Func, Decl(a.js, 64, 3), Decl(b.ts, 21, 3))
168+
>Function : Symbol(Function, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --), Decl(lib.esnext.decorators.d.ts, --, --))
155169

156170
var f: (s: string) => number;
157-
>f : Symbol(f, Decl(a.js, 61, 3), Decl(b.ts, 20, 3))
158-
>s : Symbol(s, Decl(b.ts, 20, 8))
171+
>f : Symbol(f, Decl(a.js, 67, 3), Decl(b.ts, 22, 3))
172+
>s : Symbol(s, Decl(b.ts, 22, 8))
159173

160174
var ctor: new (s: string) => { s: string };
161-
>ctor : Symbol(ctor, Decl(a.js, 64, 3), Decl(b.ts, 21, 3))
162-
>s : Symbol(s, Decl(b.ts, 21, 15))
163-
>s : Symbol(s, Decl(b.ts, 21, 30))
175+
>ctor : Symbol(ctor, Decl(a.js, 70, 3), Decl(b.ts, 23, 3))
176+
>s : Symbol(s, Decl(b.ts, 23, 15))
177+
>s : Symbol(s, Decl(b.ts, 23, 30))
164178

tests/baselines/reference/jsdocTypeTag.types

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,16 @@ var n;
2121
>n : number
2222
> : ^^^^^^
2323

24+
/** @type {BigInt} */
25+
var BI;
26+
>BI : bigint
27+
> : ^^^^^^
28+
29+
/** @type {bigint} */
30+
var bi;
31+
>bi : bigint
32+
> : ^^^^^^
33+
2434
/** @type {Boolean} */
2535
var B;
2636
>B : boolean
@@ -134,6 +144,14 @@ var b: boolean;
134144
>b : boolean
135145
> : ^^^^^^^
136146

147+
var BI: bigint;
148+
>BI : bigint
149+
> : ^^^^^^
150+
151+
var bi: bigint;
152+
>bi : bigint
153+
> : ^^^^^^
154+
137155
var V :void;
138156
>V : void
139157
> : ^^^^
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// @strict: true
2+
// @allowJs: true
3+
// @checkJs: true
4+
// @noEmit: true
5+
6+
// @filename: index.js
7+
8+
// https://github.com/microsoft/TypeScript/issues/57953
9+
10+
/**
11+
* @param {Number|BigInt} n
12+
*/
13+
function isLessThanFive(n) {
14+
return n < 5;
15+
}

tests/cases/conformance/jsdoc/jsdocTypeTag.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// @allowJS: true
2+
// @target: esnext
23
// @suppressOutputPathCheck: true
34
// @strictNullChecks: true
45

@@ -15,6 +16,12 @@ var N;
1516
/** @type {number} */
1617
var n;
1718

19+
/** @type {BigInt} */
20+
var BI;
21+
22+
/** @type {bigint} */
23+
var bi;
24+
1825
/** @type {Boolean} */
1926
var B;
2027

@@ -76,6 +83,8 @@ var N: number;
7683
var n: number
7784
var B: boolean;
7885
var b: boolean;
86+
var BI: bigint;
87+
var bi: bigint;
7988
var V :void;
8089
var v: void;
8190
var U: undefined;

0 commit comments

Comments
 (0)