在vscode JavaScript中设置全局声明

nic*_*oum 11 javascript visual-studio-code typescript-typings

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

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

defineModule("MyModule", function(exports) {
  return exports;
});
Run Code Online (Sandbox Code Playgroud)

将被复制并转换为(./build/my-module.js):

(function(global, factory) {
  "use strict";
  if (typeof exports !== "undefined" && typeof module !== "undefined") module.exports.MyModule = factory(exports.MyModule || {});
  else factory(global.MyModule = {});
})(this, function(exports) {
  return exports;
});
Run Code Online (Sandbox Code Playgroud)

其中一些功能也可能返回结果。在这种情况下,我希望能够在不使用的情况下声明参数的类型和函数的结果require.d.tsVSCode 是否可以有全局定义?

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

moo*_*ard 5

您可以在settings.json其中lib.*.d.ts使用typescript.tsdk选项指定自己的文件的地方指定自己的TypeScript文件夹路径。

{
  "typescript.tsdk": "node_modules/typescript/lib"
}
Run Code Online (Sandbox Code Playgroud)


nic*_*oum 1

致谢

这个答案主要受到mootrichard 答案的启发,但由于它必须修改,才能与我的项目一起使用,所以我也添加了这个答案。

解决方案

如果您按F12全局 JavaScript 函数(即eval),将出现一个类型声明文件 ( lib.es5.d.ts),其中包含 JavaScript 文档。您只需向该文件添加任何额外的命名空间或函数即可。但你需要使用declare而不是export

例子:

//... Other Global JavaScript Declarations

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

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

declare function ezDefine(moduleName: string, generator: *): void;
Run Code Online (Sandbox Code Playgroud)