Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.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
Variables 如何在typescript中只初始化一次全局变量_Variables_Typescript_Global - Fatal编程技术网

Variables 如何在typescript中只初始化一次全局变量

Variables 如何在typescript中只初始化一次全局变量,variables,typescript,global,Variables,Typescript,Global,我需要使“tokens”成为一个全局变量,它将在第一次调用时使用init()函数初始化 问题1。如何使用init()初始化变量?在TypeScript中初始化全局变量的最佳实践是什么 问题2。由于此变量是从json文件初始化的,如何使其在应用程序的生命周期内仅初始化一次?因此,如果我在不同的文件中导入这个变量,我不想再次读取json文件 export var tokens: Token[] = []; function init() { if (tokens) return; // a

我需要使“tokens”成为一个全局变量,它将在第一次调用时使用init()函数初始化

问题1。如何使用init()初始化变量?在TypeScript中初始化全局变量的最佳实践是什么

问题2。由于此变量是从json文件初始化的,如何使其在应用程序的生命周期内仅初始化一次?因此,如果我在不同的文件中导入这个变量,我不想再次读取json文件

export var tokens: Token[] = [];

function init() {
    if (tokens) return; // already initialized
    let tokensJson = fs.readFileSync("./lib/data/tokens.json", "utf8");
    let tokensData = JSON.parse(tokensJson);
    for (var i = 0; i < tokensData.length; i++) {
        tokens.push(new Token(tokensData[i].name, tokensData[i].type));
    }
}
导出var令牌:令牌[]=[];
函数init(){
if(令牌)返回;//已初始化
让tokensJson=fs.readFileSync(“./lib/data/tokens.json”,“utf8”);
让tokensData=JSON.parse(tokensJson);
for(var i=0;i
客户端代码:

文件1.ts

import { tokens } from "./tokens";
for (var i = 0; i < tokens.length; i++) 
    ...
从“/tokens”导入{tokens};
for(var i=0;i
文件2.ts

import { tokens } from "./tokens";
for (var i = 0; i < tokens.length; i++) 
    ...
从“/tokens”导入{tokens};
for(var i=0;i

如果您能给我一个创建全局或静态模块变量的想法或最佳模式,我将非常感激。这些变量将被初始化一次,但可以从TypeScript中的不同文件中使用。

模块的顶级代码将在第一次加载模块时执行一次。至少CommonJS模块是这样,但我认为其他类型也是这样

如果第二次导入模块,模块定义中的脚本将不会再次执行,并且将重用第一次运行返回的导出

这意味着你可以:

export var tokens: Token[] = [];

function init() {
    let tokensJson = fs.readFileSync("./lib/data/tokens.json", "utf8");
    let tokensData = JSON.parse(tokensJson);
    for (var i = 0; i < tokensData.length; i++) {
        tokens.push(new Token(tokensData[i].name, tokensData[i].type));
    }
}

init()
export var tokens = 
  JSON.parse(fs.readFileSync("./lib/data/tokens.json", "utf8"))
  .map(td => new Token(td.name, td.type));