在vscode JavaScript中设置全局声明
我正在开发一个JavaScript transpiler,除了其他功能外,它还将在构建时替换某些函数和变量 例如,以下文件(在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
/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文件了,只需要把它添加进去。不过,有几个示例说明了如何在其他地方声明和导出