Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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
在vscode JavaScript中设置全局声明_Javascript_Visual Studio Code_Typescript Typings - Fatal编程技术网

在vscode JavaScript中设置全局声明

在vscode JavaScript中设置全局声明,javascript,visual-studio-code,typescript-typings,Javascript,Visual Studio Code,Typescript Typings,我正在开发一个JavaScript transpiler,除了其他功能外,它还将在构建时替换某些函数和变量 例如,以下文件(/src/my module.js): defineModule(“MyModule”),函数(导出){ 出口退税; }); 将被复制并转换为(/build/my module.js): (功能(全局,工厂){ “严格使用”; if(typeof exports!==“undefined”&&typeof module!==“undefined”)module.expor

我正在开发一个JavaScript transpiler,除了其他功能外,它还将在构建时替换某些函数和变量

例如,以下文件(
/src/my module.js
):

defineModule(“MyModule”),函数(导出){
出口退税;
});
将被复制并转换为(
/build/my module.js
):

(功能(全局,工厂){
“严格使用”;
if(typeof exports!==“undefined”&&typeof module!==“undefined”)module.exports.MyModule=factory(exports.MyModule |{});
else工厂(global.MyModule={});
})(此功能,导出){
出口退税;
});
其中一些函数还可以返回结果。在这种情况下,我希望能够在不使用
require
的情况下声明参数的类型和函数的结果。是否可以在VSCode中具有全局
.d.ts
定义


到目前为止,我所做的只是将函数添加到
eslint
的全局变量中,以避免出现错误。

您可以在
settings.json
中指定自己的TypeScript文件夹路径,在这里您可以使用
TypeScript.tsdk
选项指定自己的
lib.*.d.ts
文件

{
  "typescript.tsdk": "node_modules/typescript/lib"
}
致谢 这个答案的灵感主要来自于,但由于它必须被修改,以配合我的项目,我也添加了这个答案

解决方案 如果在全局JavaScript函数(即
eval
)上按F12键,将出现一个包含JavaScript文档的键入声明文件(
lib.es5.d.ts
)。您可以向该文件添加任何额外的名称空间或函数。但是您需要使用
声明
,而不是
导出

例如:

//... Other Global JavaScript Declarations

// JavaScript Number Interface
interface Number {
  //...
}

// JavaScript Date Interface
interface Date {
  //...
}

declare function ezDefine(moduleName: string, generator: *): void;

我不确定我是否理解正确。这是一个Typescript项目吗?如果是,那么如何将类型添加到
tsconfig.json
中的
路径
配置中?让我知道这是否是你想要的,所以我稍后会准备一个详细的答案。所以你试图在不定义函数的情况下声明
defineModule
的类型(因为它只由transpiler内联,任何地方都没有实际的可调用函数)?@saulotoledo,我正在使用transpiler,这意味着我正在处理一个项目(如果是JavaScript或TypeScript,则完全不包括这一点),该项目将改变JavaScript文件的内容。最好将声明放在一个全局
.d.ts
文件中,这样我就可以从我的所有项目中引用,而不需要
require
语句。我按照您的指示,将
.d.ts
与typescript的其他
.d.ts
文件放在一起,VSCode仍然表示
defineModule
的类型是
any
。另外,VSCode试图使用相对于当前工作区的路径而不是
漫游/npm/node_模块
获取
节点模块/typescript/lib
。我已经使用绝对路径暂时修复了这个问题,尽管我非常感谢,如果你也能为我指出解决这个问题的正确方向。我还有什么需要做的吗?我想如果你在全球安装了typescript,你可以通过让它指向全球定义的typescript安装来绕过这个问题。显然,如果您的项目指向不同版本的TypeScript,那么这会产生问题。仍然有点不清楚,我是应该在
lib
目录下创建一个新文件(我必须声明它吗?),还是应该使用一个现有文件(哪一个?)。我应该使用
导出
还是
声明
?你能展示一个导出
defineModule
函数的例子吗?哦,我想你已经知道如何创建自己的*.d.ts文件了,只需要把它添加进去。不过,有几个示例说明了如何在其他地方声明和导出