2017-12-13 37 views
1

私はだから私はp('some message')の代わりconsole.log('some message')を使用することができ、グローバルに利用できるヘルパーTypeScriptすべてのファイルでグローバル変数を宣言する方法は?

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

を定義したいです。

しかし、TypeScriptはpが定義されていないと言っています。 TypeScriptコンパイラに、すべてのファイルで使用できるグローバル変数pがあることを伝える方法はありますか?

+0

特定のファイルから 'p'機能をインポートするの欠点は何ですか?なぜそれがグローバルでなければならないのですか? – k0pernikus

+0

関連する質問:https://stackoverflow.com/questions/45647204/typescript-how-to-use-utilities-file-project-wide-with-minimum-ceremony – k0pernikus

+0

私はTypeScript linterを使用しているので、未使用の変数をすべてキャッチします。あなたは単にpをインポートしてそこに残すことはできません、それは使用または削除する必要があります。また、すべてのファイルに 'import {p} from xxx'を入れたくありません。 –

答えて

1

スマートに移動するとロギングが抽象化されるため、プログラム全体でコードに直接結びつくことはなく、console.logに直接依存します。

それはすでに世界的に存在するとしてあなたはそれを宣言することができます:

declare var p: (message: any, ...additionals: any[]) => void; 
をしかし、あなたはすべてのファイルにこれを配置しなければならなかった場合、あなたにも可能性があります:

import { p } from './logging'; 

でロギングモジュールにすることであなたのconsole.logラッパー

+1

申し訳ありませんが、私はそれを取得しませんでした。この行 'import {p} 'を' ./logging ';から追加するのは、まさに私が避けようとしているものです。私はそれをすべてのファイルに入れたくありません。 –

+1

@AlexeyPetrushinなぜそれを避けたいですか?これは、タイトスクリプトが実行したいものです。従属性をできるだけ明示的に 'imports'にすることで、あなたが使っているものとその由来を知ることができます。地球はただ水を濁す。 – k0pernikus

1

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; 
 
    } 
 
}

これは私がグローバル設定に使用するサービスです。それから私は、このようにグローバル変数を設定/取得することができます:あなたは、単にあなたのp変数とOKと活字体を伝えたい場合

import { GlobalStatus } from './globalStatus.service'; 
 

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

 
// getter 
 
this.globalStatus.getStatusValue("yourValue")

+0

これは実際にグローバル変数を管理することを可能にしますが、それは実際には(タイトルにかかわらず)OPが望むものではありません。フェントンの答えを見てください。 – msanford

+1

はい申し訳ありませんが、私はタイトルに答えました。しかし、私はこれがグローバル変数を管理する正しい方法でなければならないと思います。私はこの答えを削除する必要がありますか? =) –

+1

実際には、質問のタイトルのために、次の数ヶ月間、人々はそれが有用であり、それを高く評価すると確信しています。私はそれを個人的に残しておき、他の人は別の意見でチャイムするかもしれない。あなたが突然downvotesの鳴き声を得る場合、あなたは何をすべきかを知っているでしょう:) – msanford

0

は、あなたがあなたのファイルの頭でそれを宣言することができます:

declare var p: any; 
+0

正しいインターフェイス、 '(メッセージ:any、... anyals:any [])を宣言できるときに、 )=>「void」と答えていますか? – msanford

+0

いいえ、それは動作しません、それは単一のファイルでのみ動作します。 –

関連する問題