Javascript 当使用TypeScript通过JSDocs检查JS时,如何声明变量对应于名称空间?
在我的JS代码中,我导入了如下模块:Javascript 当使用TypeScript通过JSDocs检查JS时,如何声明变量对应于名称空间?,javascript,typescript,jsdoc,Javascript,Typescript,Jsdoc,在我的JS代码中,我导入了如下模块: const toolbox=require(“../toolbox”) /** *@param{toolbox.Hammer}Hammer */ 功能使用锤子(锤子){ 让钉子=新工具箱。钉子() 锤子,火腿(钉子) } 现在,因为我的tools/index.d.ts文件将toolbox导出为命名空间。我的IDE可以看到hammer上有一个ham方法。令人惊叹的但它无法看到工具箱中有一个成员Nail 我尝试将@module和@export标记放在toolb
const toolbox=require(“../toolbox”)
/**
*@param{toolbox.Hammer}Hammer
*/
功能使用锤子(锤子){
让钉子=新工具箱。钉子()
锤子,火腿(钉子)
}
现在,因为我的tools/index.d.ts
文件将toolbox
导出为命名空间。我的IDE可以看到hammer
上有一个ham
方法。令人惊叹的但它无法看到工具箱
中有一个成员Nail
我尝试将@module
和@export
标记放在toolbox/index.js
中,但没有成功。我还尝试在require
语句上方放置一个@type{toolbox}
,但我被告知工具箱在其自身的类型注释中直接或间接引用
如何让IDE知道toolbox=require('toolbox')
使toolbox
与我的命名空间相对应
示例toolbox/index.js
和toolbox/index.d.ts
供参考:
exports.Hammer=class{
火腿(钉子){
if(Math.random()>0.1){
exports.nailCount-=1
“砰!”
}否则就回‘哎哟,我的大拇指!’
}
}
exports.nailCount=100
exports.Nail=class{}
export=toolbox
导出为命名空间工具箱
声明命名空间工具箱{
类钉子{}
类锤{
火腿(n:钉子):绳子
}
}
还有我的tConfig(因为这是一个小货柜)
您使用的是哪个IDE
在VS Code中,我可以看到Nail
和nailCount
显示为工具箱的一部分
请参见此图:
另外,为了确保hammer.ham
函数只接受Nail
实例,请在index.d.ts
中的Nail
类定义中添加一些属性
例如。
现在,在main/index.js
中,如果传递的不是Nail
实例,我们将得到一个错误。
例如
请参见此图:
我应该提到,尽管这不是这个问题的关键,但我的目标之一是在这个阶段不修改JS文件。如果这完全来自.d.ts
文件,那就太好了。但这不是一个表演的障碍。在这个阶段,一些JSDoc注释是可以接受的,但不是首选的。嗯,我使用的是VSCode,可能是项目结构中存在一些干扰。我会看看是否可以复制并发回。
{
"compilerOptions": {
"allowJs": true,
"target": "es5",
"checkJs": true,
"baseUrl": "../",
"moduleResolution": "node",
"noEmit": true
}
}
// toolbox/index.d.ts
export = toolbox;
export as namespace toolbox;
declare namespace toolbox {
class Nail {
length: string; // new property added
}
class Hammer {
ham(n: Nail): string;
}
}
const toolbox = require("../toolbox");
/**
* @param {toolbox.Hammer} hammer
*/
function useHammer(hammer) {
let nail = new toolbox.Nail();
hammer.ham("nail-string"); // this will show a red squiggle under "nail-string" since it is a string and the compiler expected a Nail instance
}