gpt4 book ai didi

javascript - JSDoc 重载函数不适用于 TypeScript

转载 作者:行者123 更新时间:2023-12-05 00:27:48 24 4
gpt4 key购买 nike

我正在使用其他问题和在线建议的 JSDoc 重载语法,不确定我是否正确,但这里是:

/**
* @param {string} param
* @returns {'string result'}
*//**
* @param {number} param
* @returns {'number result'}
*/
function overloaded(param) {
switch (typeof param) {
case 'string': return 'string result';
case 'number': return 'number result';
}

throw new Error(`Invalid type: ${typeof param}`);
}

overloaded('seven');
overloaded(7);

此函数应返回 string result如果输入参数的类型是 string它应该返回 number result如果输入参数的类型是 number .在普通的 TypeScript 中,这将是:
function overloaded2(param: string): 'string result';
function overloaded2(param: number): 'number result';
function overloaded2(param: string | number): 'string result' | 'number result' {
switch (typeof param) {
case 'string': return 'string result';
case 'number': return 'number result';
}

throw new Error(`Invalid type: ${typeof param}`);
}

overloaded2('seven');
overloaded2(7);

问题是我拥有的 JSDoc 可能是不正确的,因为 VS Code 语言服务提供的 TypeScript 推理无法承受重载:



基本上它只看到第一个过载。 TypeScript 中的 JSDoc 支持是否足够先进,让我能够将 JavaScript 代码键入到与 TypeScript 对应的相同程度?那看起来怎么样?

最佳答案

更新:包括我的首选方法

/**
* @callback ConvertNumberToArray
* @param {number} input
* @return {number[]}
*
* @callback keepStrings
* @param {string} input
* @return {string}
*/

/**
* @type {ConvertNumberToArray & keepStrings}
*/
const parse = input => {
if (typeof input === 'number') return [input]
else return input
}
它在 VSCode 中的样子
enter image description here

原帖:
看看这里
https://austingil.com/typescript-function-overloads-with-jsdoc/
例子
/**
* @type {{
* (input: number) => number;
* (input: string) => string;
* }}
*/
const double = (input) => {
if (typeof input === 'number') {
return input * 2
}
return input + input
}

关于javascript - JSDoc 重载函数不适用于 TypeScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54262105/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com