fix dts generation of jsdoc (#49904)

This commit is contained in:
Zzzen
2022-07-29 08:44:23 +08:00
committed by GitHub
parent 5d790526a1
commit 1490037f17
5 changed files with 140 additions and 0 deletions

View File

@@ -4913,6 +4913,13 @@ namespace ts {
}
function typeToTypeNodeHelper(type: Type, context: NodeBuilderContext): TypeNode {
const savedFlags = context.flags;
const typeNode = typeToTypeNodeWorker(type, context);
context.flags = savedFlags;
return typeNode;
}
function typeToTypeNodeWorker(type: Type, context: NodeBuilderContext): TypeNode {
if (cancellationToken && cancellationToken.throwIfCancellationRequested) {
cancellationToken.throwIfCancellationRequested();
}

View File

@@ -0,0 +1,48 @@
//// [foo.js]
/**
* @typedef {{
* [id: string]: [Function, Function];
* }} ResolveRejectMap
*/
let id = 0
/**
* @param {ResolveRejectMap} handlers
* @returns {Promise<any>}
*/
const send = handlers => new Promise((resolve, reject) => {
handlers[++id] = [resolve, reject]
})
//// [foo.js]
/**
* @typedef {{
* [id: string]: [Function, Function];
* }} ResolveRejectMap
*/
let id = 0;
/**
* @param {ResolveRejectMap} handlers
* @returns {Promise<any>}
*/
const send = handlers => new Promise((resolve, reject) => {
handlers[++id] = [resolve, reject];
});
//// [foo.d.ts]
/**
* @typedef {{
* [id: string]: [Function, Function];
* }} ResolveRejectMap
*/
declare let id: number;
/**
* @param {ResolveRejectMap} handlers
* @returns {Promise<any>}
*/
declare function send(handlers: ResolveRejectMap): Promise<any>;
type ResolveRejectMap = {
[id: string]: [Function, Function];
};

View File

@@ -0,0 +1,28 @@
=== tests/cases/conformance/jsdoc/declarations/foo.js ===
/**
* @typedef {{
* [id: string]: [Function, Function];
* }} ResolveRejectMap
*/
let id = 0
>id : Symbol(id, Decl(foo.js, 6, 3))
/**
* @param {ResolveRejectMap} handlers
* @returns {Promise<any>}
*/
const send = handlers => new Promise((resolve, reject) => {
>send : Symbol(send, Decl(foo.js, 12, 5))
>handlers : Symbol(handlers, Decl(foo.js, 12, 12))
>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, --, --))
>resolve : Symbol(resolve, Decl(foo.js, 12, 38))
>reject : Symbol(reject, Decl(foo.js, 12, 46))
handlers[++id] = [resolve, reject]
>handlers : Symbol(handlers, Decl(foo.js, 12, 12))
>id : Symbol(id, Decl(foo.js, 6, 3))
>resolve : Symbol(resolve, Decl(foo.js, 12, 38))
>reject : Symbol(reject, Decl(foo.js, 12, 46))
})

View File

@@ -0,0 +1,36 @@
=== tests/cases/conformance/jsdoc/declarations/foo.js ===
/**
* @typedef {{
* [id: string]: [Function, Function];
* }} ResolveRejectMap
*/
let id = 0
>id : number
>0 : 0
/**
* @param {ResolveRejectMap} handlers
* @returns {Promise<any>}
*/
const send = handlers => new Promise((resolve, reject) => {
>send : (handlers: ResolveRejectMap) => Promise<any>
>handlers => new Promise((resolve, reject) => { handlers[++id] = [resolve, reject]}) : (handlers: ResolveRejectMap) => Promise<any>
>handlers : ResolveRejectMap
>new Promise((resolve, reject) => { handlers[++id] = [resolve, reject]}) : Promise<any>
>Promise : PromiseConstructor
>(resolve, reject) => { handlers[++id] = [resolve, reject]} : (resolve: (value: any) => void, reject: (reason?: any) => void) => void
>resolve : (value: any) => void
>reject : (reason?: any) => void
handlers[++id] = [resolve, reject]
>handlers[++id] = [resolve, reject] : [(value: any) => void, (reason?: any) => void]
>handlers[++id] : [Function, Function]
>handlers : ResolveRejectMap
>++id : number
>id : number
>[resolve, reject] : [(value: any) => void, (reason?: any) => void]
>resolve : (value: any) => void
>reject : (reason?: any) => void
})

View File

@@ -0,0 +1,21 @@
// @allowJs: true
// @checkJs: true
// @target: esnext
// @outDir: ./out
// @declaration: true
// @filename: foo.js
/**
* @typedef {{
* [id: string]: [Function, Function];
* }} ResolveRejectMap
*/
let id = 0
/**
* @param {ResolveRejectMap} handlers
* @returns {Promise<any>}
*/
const send = handlers => new Promise((resolve, reject) => {
handlers[++id] = [resolve, reject]
})