Closed
Description
TypeScript Version: 4.0.0-dev.20200512
Search Terms: jsdoc, declaration, optional
Code
clazz.js
:
export class Clazz {
/**
* @param {string=} optionalParam
* @param {function():*=} optionalFunctionDeclaration
*/
method(optionalParam, optionalFunctionDeclaration) {}
}
tsconfig.json
:
{
"compilerOptions": {
"outDir": "lib",
"declaration": true,
"allowJs": true,
"checkJs": true
},
"files": [
"clazz.js"
]
}
Expected behavior:
The emitted declaration file is:
export class Clazz {
/**
* @param {string=} optionalParam
* @param {function():*=} optionalFunctionDeclaration
*/
method(optionalParam?: string | undefined, optionalFunctionDeclaration?: (() => any) | undefined): void;
}
Actual behavior:
> tsc --version && tsc -p tsconfig.json
Version 4.0.0-dev.20200512
vararg.js:6:25 - error TS1016: A required parameter cannot follow an optional parameter.
6 method(optionalParam, optionalFunctionDeclaration) {}
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Found 1 error.
Note that the return type is *
which is any
in jsdoc. If we use a different return type, TS will compile successfully. For example, if we use ?
as return type the following is emitted:
export class Clazz {
/**
* @param {string=} optionalParam
* @param {function():?=} optionalFunctionDeclaration
*/
method(optionalParam?: string | undefined, optionalFunctionDeclaration?: (() => unknown) | undefined): void;
}
Playground Link:
Related Issues: #37703