如何在不切换到TypeScript的情况下向JavaScript模块添加TypeScript类型?
我想这个标题有点让人困惑,但我没能用一个简短的标题来表达它。然而,这就是我想要做的:如何在不切换到TypeScript的情况下向JavaScript模块添加TypeScript类型?,javascript,typescript,types,Javascript,Typescript,Types,我想这个标题有点让人困惑,但我没能用一个简短的标题来表达它。然而,这就是我想要做的: 我有一个npm模块,它是用JavaScript编写的,而不是用TypeScript编写的 这个模块的一些用户正在使用TypeScript,所以如果我能为我的JavaScript代码提供类型注释,那就太好了 但我不想切换到TypeScript,但我想坚持使用纯JavaScript 所以,我要寻找的是某种外部类型声明清单,或者类似的东西 这可能吗?如果是,怎么做 如果这对TypeScript用户来说是一个幼稚的
- 我有一个npm模块,它是用JavaScript编写的,而不是用TypeScript编写的
- 这个模块的一些用户正在使用TypeScript,所以如果我能为我的JavaScript代码提供类型注释,那就太好了
- 但我不想切换到TypeScript,但我想坚持使用纯JavaScript
add
的函数,它需要两个数字或一个数字数组
/src/index.js
exports.add=函数添加(a,b){
if(Array.isArray(a))返回a.reduce((sum,val)=>sum+val,0)
else if(arguments.length==2&&typeof a==='number'&&typeof b=='number')返回a+b
抛出新错误(“无效输入”)
}
然后我们可以创建一个定义文件.d.ts
,这将描述我们的JavaScript函数。您应该保持根文件夹中的文件名和文件结构与JS相同,例如types
/types/index.d.ts
/**
*总结两个数字。
*
*@param{number}a是要添加的第一个数字。
*@param{number}b要添加的第二个数字。
*@返回{number}两个数字的结果和。
*/
导出声明函数add(a:编号,b:编号):编号
/**
*总结一系列数字。
*
*@param{number[]}编号要添加的数字数组。
*@返回所有数字的结果和{number}。
*/
导出声明函数add(编号:number[]):编号
注意:创建重载时,最复杂的定义应放在第一位,最不复杂的定义应放在最后一位,请参阅和所有
该文件只描述了所有的函数/类/接口/模块
,没有任何逻辑。从我的示例中可以看到,在文件中可以创建重载。这将允许您定义函数的多种使用方式。该文件还支持JSDoc,所以我也会使用它
接下来,我们需要修改package.json,这将告诉TypeScript解析器在哪里找到这个包的定义
/package.json
{
“类型”:“类型/索引d.ts”
}
注意:该“typings”
字段与“types”
同义,也可以使用
有关package.json
的更多信息,请参阅
这基本上就是创建
.d.ts
的全部内容。您可以编写自己的.d.ts
文件,或者使用JSDoc。或者,它可以确保告诉您的用户您的代码是一个带有API的黑盒,并告诉他们的构建系统不要尝试将其作为“typescript”进行解析。您刚刚描述了typescript的功能:有一个巨大的集合,但首选的解决方案是如果库作者愿意维护它们。感谢这个答案,我一直遵循它-当使用vscode时,还有什么需要的吗?