TypeScript如何在每个文件中声明全局变量?

时间:2017-12-13 13:36:15

标签: typescript

我想定义一个全局可用的帮助器

global.p = console.log.bind(console)

所以我可以使用p('some message')代替console.log('some message')

但TypeScript抱怨p未定义。有没有办法告诉TypeScript编译器,每个文件中都有可用的全局变量p

4 个答案:

答案 0 :(得分:2)

智能移动以抽象日志记录,因此您不会在整个程序中直接使用直接依赖于user:age:12的代码。

您可以将其声明为全局已存在:

34

但如果你不得不把它放在每个文件中,你也可以这样做:

console.log

使用declare var p: (message: any, ...additionals: any[]) => void; 包装器创建日志记录模块。

答案 1 :(得分:2)

我想我知道您要做什么-您希望打字稿理解<nav id="site-navigation" class="main-navigation"> <button class="menu-toggle" aria-controls="primary-menu" aria-expanded="false">Primary Menu</button> <div class="menu-main-container"><ul id="primary-menu" class="menu nav-menu" aria-expanded="false"><li id="menu-item-219" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-home current-menu-item page_item page-item-88 current_page_item menu-item-219"><a href="http://shegames.net/">Home</a></li> <li id="menu-item-1312" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1312"><a href="http://shegames.net/my-account">My Account</a></li> <li id="menu-item-1313" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1313"><a href="http://shegames.net/checkout">Checkout</a></li> <li id="menu-item-1314" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1314"><a href="http://shegames.net/cart">Cart</a></li> <li id="menu-item-1315" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1315"><a href="http://shegames.net/shop">Shop</a></li> </ul></div> </nav> 变量是在全局范围内设置的,而不必在每个文件中都p

如果我没记错的话,您需要做一个环境声明:

import { p } from ...

不必在每个文件中都声明。将其放在名为declare const p: (message: string) => void // or whatever 的文件夹中的d.ts文件中,然后将该文件包含在tsconfig中:

typings/

注意:您的d.ts文件无法导入任何其他模块。但是它可以使用在其他d.ts文件中声明的其他环境类型,而无需导入它们。如果您导入了某些内容,那么打字稿将不会将您的文件视为环境声明,它将无法正常工作。

答案 2 :(得分:1)

&#13;
&#13;
import {Injectable} from '@angular/core';

@Injectable()
export class GlobalStatus {
  private _status : any;
  constructor() {
    this._status = {
      "GlobaConfigVersion": "0.0.0"
    }
  }
  
  getStatusValue(valKey: string): any {
    return this._status[valKey];
  }
  setStatusValue(valKey: string, theStatus: any): any {
    this._status[valKey] = theStatus;
  }
}
&#13;
&#13;
&#13;

这是我用于全局配置的服务。然后我可以用这种方式设置/获取全局变量:

&#13;
&#13;
import { GlobalStatus } from './globalStatus.service';

//setter
this.globalStatus.setStatusValue("yourValue", value)

// getter
this.globalStatus.getStatusValue("yourValue")
&#13;
&#13;
&#13;

答案 3 :(得分:0)

如果您只想告诉TypeScript使用p变量,可以在文件的头部声明它:

declare var p: any;