2017-07-11 8 views
1

私は、次のレガシーJavaScriptを持っている:Typescriptグローバルenums?

var RED = "red"; 
var GREEN = "green"; 
var BLUE = "blue"; 

function foo(color) { 
    // color MUST be RED, GREEN, or BLUE 
} 

// eg... 
foo(RED); 

.d.tsファイルでこれをエンコードする方法はありますか?

私はJavaScriptを変更できません。

答えて

4

RED,GREENおよびBLUEは、値が変更されないものとして処理されるとします。

declare var RED: "red"; 
declare var GREEN: "green"; 
declare var BLUE: "blue"; 

注:あなたもだけではなく、const宣言としてこれらを宣言したい場合があります文字列リテラルタイプを持っているそれぞれの -

まず、あなたは明示的にそれぞれの種類を述べることができます。

その後、あなたはこれらに基づいてColorタイプを作成することができます:あなたはそれらのいくつかの値のうち1つだけを受け入れるたびColorタイプを使用し、

type Color = typeof RED 
      | typeof GREEN 
      | typeof BLUE; 

または代わりに最後に

type Color = "red" 
      | "green" 
      | "blue"; 

を:

declare function foo(color: Color): any; 
+0

fantastic。モナコだけがリテラルタイプをオートコンプリートするなら... – Spongman

+0

それは:http://imgur.com/a/5BXKo –

+0

はい、私はそれが文字列の値の代わりに赤|緑|青を提案すると期待したいと思います。 – Spongman