NodeJS 如何访问通过Object.defineProperty声明的常量

dly7yett  于 2023-06-29  发布在  Node.js
关注(0)|答案(1)|浏览(140)

我正在学习如何声明应用程序范围的全局常量。参考这篇文章here的答案Dominic Barnes,为标题为constants.js -- Better的代码.我复制并粘贴了它,如下所示:

constants.js

function define(name, value) {
    Object.defineProperty(exports, name, {
        value:      value,
        enumerable: true
    });
}

define("PI", 3.14);

在app.js中调用constants.js

import constants from './constants/constants';
var req=https.get('https://xx/xx/getDistanceFromOriginToDestination/30.976639,30.056021,30.97775,30.033333',options, callback);
constants. //<==========????
req.on('error', (e) => {
    console.error("problem with request:", e);
});
req.end();

问题是,在Dominic Barnes的帖子中,他可以访问PI,如下所示,如他的回答所示:

var constants = require("./constants");
console.log(constants.PI); // 3.14
constants.PI = 5;
console.log(constants.PI); // still 3.14

在我的例子中,VS-Codes的自动完成没有显示任何从constants.js派生的东西,或者换句话说,我不能访问PI。请让我知道我错过了什么,以chieve访问常量PIconstants.js中声明

5cg8jx4n

5cg8jx4n1#

VSCode使用Typescript类型信息来提供智能感知,如自动完成和参数提示。
您可以为constants JavaScript模块创建自己的module type descriptor。在constants.js旁边添加一个新的constants.d.ts文件,内容如下

export declare const PI: number;

您可以在下面的CodeSandbox示例中看到结果

如果没有.d.ts描述符,编辑器将无法识别constants.PI

但是一旦启用了描述符,您就会得到自动完成和类型提示

请注意,在这两种情况下,代码都会编译并显示正确的值。

相关问题