Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不切换到TypeScript的情况下向JavaScript模块添加TypeScript类型?_Javascript_Typescript_Types - Fatal编程技术网

如何在不切换到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
所以,我要寻找的是某种外部类型声明清单,或者类似的东西

这可能吗?如果是,怎么做

如果这对TypeScript用户来说是一个幼稚的问题,请容忍我,但我绝对没有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时,还有什么需要的吗?