在VSCode中声明Javascript全局命名空间对象

在VSCode中声明Javascript全局命名空间对象,javascript,node.js,visual-studio-code,jsdoc,.d.ts,Javascript,Node.js,Visual Studio Code,Jsdoc,.d.ts,我有一个新的Javascript环境,而不是Node.js或Browser,它有一个新的全局对象,就像在Node.js或Browser中一样。因此,如果我将属性分配给GameGlobal(例如GameGlobal.THREE=3),则该属性(byTHREE而不是GameGlobal.THREE)可以在任何模块中使用。不幸的是,VSCode无法识别它 // //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Sta

我有一个新的Javascript环境,而不是Node.js或Browser,它有一个新的全局对象,就像在Node.js或Browser中一样。因此,如果我将属性分配给
GameGlobal
(例如
GameGlobal.THREE=3
),则该属性(by
THREE
而不是
GameGlobal.THREE
)可以在任何模块中使用。不幸的是,VSCode无法识别它

//
//https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#Import_an_entire_modules_contents
//从'./js/THREE.module'//export{…}将*作为三导入;无法被WeXin开发人员工具识别
//从'THREE.min'导入*为三
//https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#Import_a_module_for_its_side_effects_only
//如果('object'==typeof GameGlobal)GameGlobal.initAndStart=initAndStart;
//if('object'==模块类型){
//module.exports=initAndStart;//导出默认函数initAndStart(){}
//https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var#var_hoisting
GameGlobal.THREE=require('THREE');//从'THREE'导入*为三
//导入“./SubdivisionModifier.js”
/**@type{typeof import('./TransformControls.js').TransformControls}*/
GameGlobal.TransformControls=require('TransformControls').TransformControls;//从'./TransformControls.js'导入{TransformControls}
//}
/// 
//https://github.com/wechat-miniprogram/minigame-api-typings
//安装类型定义(DefinitelyTyped):npm安装小游戏api类型
//https://vscode-docs1.readthedocs.io/en/stable/languages/javascript/#defining-dts外部的全局变量
/*全球游戏全球*/
GameGlobal.mexport=函数(){}
//https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import#Import_a_module_for_its_side_effects_only
//导入“./js/sdk.js”:导入整个模块仅用于副作用,不导入任何内容。
//它运行模块的全局代码,但实际上不导入任何值。
//从“三”中导入三
/**@param{THREE.crossion}crossion*/
函数onclick(交叉点){
交叉点、物体;
}
在上面的示例中,即使
GameGlobal.THREE=require('THREE')
,但
@param{THREE.Intersection}
THREE
Intersection
上的工具提示都显示了“any”

还有,我提到了,但它不起作用

智能感知支持

VS代码通过使用类型定义.d.ts文件,为浏览器、Node.js和几乎所有其他环境的内置符号提供智能感知。是所有主要JavaScript库和环境的打字文件存储库。使用TypeScript定义管理器可以轻松管理打字。IntelliSense会自动为项目文件夹中的CommonJS和AMD模块提供

那么,有没有什么方法可以定制和添加这样一个全局命名空间对象
GameGlobal
?我相信关键可能是提供一个文件

我在VSCode中创建并打开了一个js文件,然后使用了下面的代码。它给了我工具提示,如下所示:

if('object'==typeof全局){
//在Nodejs环境中
//工具提示显示“any”,然后是“module global”。请认为它在node.js中有效。
}else if('object'==窗口类型){
//在浏览器环境中
//工具提示显示“var window:window&typeof globalThis”。我认为它在浏览器中是有效的。
}
if('object'==typeof globalThis){
//“globalThis”上的工具提示显示“模块globalThis”
}
global.GameGlobal=global;
//window.GameGlobal=window;
GameGlobal.THREE={
向量2:{x:0,y:0}
};
三//工具提示显示“任意”
log('THREE:',THREE.Vector2.x)//3:0
读完后,我写了一篇文章

//
// 
//https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis
//https://github.com/es-shims/globalThis
//https://github.com/Microsoft/TypeScript/issues/15626
//https://vscode-docs1.readthedocs.io/en/stable/languages/javascript/#defining-dts外部的全局变量
//@typedef{GameGlobal.THREE}THREE GameGlobal.THREE:typeof require('THREE'))
宣布全球{
var-GameGlobal:global;
}
//声明let GameGlobal=global&Window&typeof globalThis;
//声明var-GameGlobal:Object;
声明变量三:导入类型(“三”);
/**
*包含有关物理字体的基本信息。所有尺寸均在中指定
*逻辑单元;也就是说,它们取决于显示上下文的当前映射模式。
*/
声明类TextMetric{
/**
*是一个'double',以CSS像素表示内联文本段的计算宽度。
*它考虑了上下文的当前字体。
*/
宽度:数字;
高度:数字;
}
/**
*测量画布中文本的尺寸。
*@param{CanvasRenderingContext2D}上下文
*@param{string}text要测量的文本'string'。
*@return{TextMetric}A`TextMetric`对象
*@见https://stackoverflow.com/questions/1134586/how-can-you-find-the-height-of-text-on-an-html-canvas
*/
声明函数measureText(上下文:CanvasRenderingContext2D,文本:string):TextMetric;
我发现当我使用从“三”导入三时,VSCode可以在代码
THREE.Vector2
和注释
@param{THREE.Vector2}
上显示正确的工具提示,但这不是我所期望的

  • 这些对象在所有模块中都可用

    此处列出的对象特定于Node.js。还有一些是JavaScript语言本身的一部分,也是全局可访问的

    全球

    加入:v0.1.27

    • 全局命名空间对象

      在浏览器中,最上面的
      // <reference path="./wx/index.d.ts" />
      // <reference path="../../../node_modules/three/src/Three.d.ts" />
      
      //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/globalThis
      //https://github.com/es-shims/globalThis
      
      //https://github.com/Microsoft/TypeScript/issues/15626
      //https://vscode-docs1.readthedocs.io/en/stable/languages/javascript/#defining-global-variables-outside-dts
      // @typedef {GameGlobal.THREE} THREE GameGlobal.THREE: typeof require('three')
      
      declare global {
          var GameGlobal: global;
      }
      //declare let GameGlobal = global & Window & typeof globalThis;
      //declare var GameGlobal: Object;
      declare var THREE: typeof import('three');
      
      /**
       * contains basic information about a physical font. All sizes are specified in
       * logical units; that is, they depend on the current mapping mode of the display context.
       */
      declare class TextMetric {
          /**
           * Is a `double` giving the calculated width of a segment of inline text in CSS pixels.
           * It takes into account the current font of the context.
           */
          width: number;
          height: number;
      }
      
      /**
       * Measures the dimensions of a piece of text in the canvas.
       * @param {CanvasRenderingContext2D} context
       * @param {string} text The text `String` to measure.
       * @return {TextMetric} A `TextMetric` object
       * @see https://stackoverflow.com/questions/1134586/how-can-you-find-the-height-of-text-on-an-html-canvas
       */
      declare function measureText(context: CanvasRenderingContext2D, text: string): TextMetric;