Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/479.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
Javascript 当使用TypeScript通过JSDocs检查JS时,如何声明变量对应于名称空间?_Javascript_Typescript_Jsdoc - Fatal编程技术网

Javascript 当使用TypeScript通过JSDocs检查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

在我的JS代码中,我导入了如下模块:

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中,我可以看到NailnailCount显示为工具箱的一部分

请参见此图:

另外,为了确保
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
}