Skip to content

Commit 1490037

Browse files
authored
fix dts generation of jsdoc (#49904)
1 parent 5d79052 commit 1490037

File tree

5 files changed

+140
-0
lines changed

5 files changed

+140
-0
lines changed

src/compiler/checker.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4913,6 +4913,13 @@ namespace ts {
49134913
}
49144914

49154915
function typeToTypeNodeHelper(type: Type, context: NodeBuilderContext): TypeNode {
4916+
const savedFlags = context.flags;
4917+
const typeNode = typeToTypeNodeWorker(type, context);
4918+
context.flags = savedFlags;
4919+
return typeNode;
4920+
}
4921+
4922+
function typeToTypeNodeWorker(type: Type, context: NodeBuilderContext): TypeNode {
49164923
if (cancellationToken && cancellationToken.throwIfCancellationRequested) {
49174924
cancellationToken.throwIfCancellationRequested();
49184925
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
//// [foo.js]
2+
/**
3+
* @typedef {{
4+
* [id: string]: [Function, Function];
5+
* }} ResolveRejectMap
6+
*/
7+
8+
let id = 0
9+
10+
/**
11+
* @param {ResolveRejectMap} handlers
12+
* @returns {Promise<any>}
13+
*/
14+
const send = handlers => new Promise((resolve, reject) => {
15+
handlers[++id] = [resolve, reject]
16+
})
17+
18+
//// [foo.js]
19+
/**
20+
* @typedef {{
21+
* [id: string]: [Function, Function];
22+
* }} ResolveRejectMap
23+
*/
24+
let id = 0;
25+
/**
26+
* @param {ResolveRejectMap} handlers
27+
* @returns {Promise<any>}
28+
*/
29+
const send = handlers => new Promise((resolve, reject) => {
30+
handlers[++id] = [resolve, reject];
31+
});
32+
33+
34+
//// [foo.d.ts]
35+
/**
36+
* @typedef {{
37+
* [id: string]: [Function, Function];
38+
* }} ResolveRejectMap
39+
*/
40+
declare let id: number;
41+
/**
42+
* @param {ResolveRejectMap} handlers
43+
* @returns {Promise<any>}
44+
*/
45+
declare function send(handlers: ResolveRejectMap): Promise<any>;
46+
type ResolveRejectMap = {
47+
[id: string]: [Function, Function];
48+
};
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
=== tests/cases/conformance/jsdoc/declarations/foo.js ===
2+
/**
3+
* @typedef {{
4+
* [id: string]: [Function, Function];
5+
* }} ResolveRejectMap
6+
*/
7+
8+
let id = 0
9+
>id : Symbol(id, Decl(foo.js, 6, 3))
10+
11+
/**
12+
* @param {ResolveRejectMap} handlers
13+
* @returns {Promise<any>}
14+
*/
15+
const send = handlers => new Promise((resolve, reject) => {
16+
>send : Symbol(send, Decl(foo.js, 12, 5))
17+
>handlers : Symbol(handlers, Decl(foo.js, 12, 12))
18+
>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, --, --))
19+
>resolve : Symbol(resolve, Decl(foo.js, 12, 38))
20+
>reject : Symbol(reject, Decl(foo.js, 12, 46))
21+
22+
handlers[++id] = [resolve, reject]
23+
>handlers : Symbol(handlers, Decl(foo.js, 12, 12))
24+
>id : Symbol(id, Decl(foo.js, 6, 3))
25+
>resolve : Symbol(resolve, Decl(foo.js, 12, 38))
26+
>reject : Symbol(reject, Decl(foo.js, 12, 46))
27+
28+
})
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
=== tests/cases/conformance/jsdoc/declarations/foo.js ===
2+
/**
3+
* @typedef {{
4+
* [id: string]: [Function, Function];
5+
* }} ResolveRejectMap
6+
*/
7+
8+
let id = 0
9+
>id : number
10+
>0 : 0
11+
12+
/**
13+
* @param {ResolveRejectMap} handlers
14+
* @returns {Promise<any>}
15+
*/
16+
const send = handlers => new Promise((resolve, reject) => {
17+
>send : (handlers: ResolveRejectMap) => Promise<any>
18+
>handlers => new Promise((resolve, reject) => { handlers[++id] = [resolve, reject]}) : (handlers: ResolveRejectMap) => Promise<any>
19+
>handlers : ResolveRejectMap
20+
>new Promise((resolve, reject) => { handlers[++id] = [resolve, reject]}) : Promise<any>
21+
>Promise : PromiseConstructor
22+
>(resolve, reject) => { handlers[++id] = [resolve, reject]} : (resolve: (value: any) => void, reject: (reason?: any) => void) => void
23+
>resolve : (value: any) => void
24+
>reject : (reason?: any) => void
25+
26+
handlers[++id] = [resolve, reject]
27+
>handlers[++id] = [resolve, reject] : [(value: any) => void, (reason?: any) => void]
28+
>handlers[++id] : [Function, Function]
29+
>handlers : ResolveRejectMap
30+
>++id : number
31+
>id : number
32+
>[resolve, reject] : [(value: any) => void, (reason?: any) => void]
33+
>resolve : (value: any) => void
34+
>reject : (reason?: any) => void
35+
36+
})
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// @allowJs: true
2+
// @checkJs: true
3+
// @target: esnext
4+
// @outDir: ./out
5+
// @declaration: true
6+
// @filename: foo.js
7+
/**
8+
* @typedef {{
9+
* [id: string]: [Function, Function];
10+
* }} ResolveRejectMap
11+
*/
12+
13+
let id = 0
14+
15+
/**
16+
* @param {ResolveRejectMap} handlers
17+
* @returns {Promise<any>}
18+
*/
19+
const send = handlers => new Promise((resolve, reject) => {
20+
handlers[++id] = [resolve, reject]
21+
})

0 commit comments

Comments
 (0)