回答:
TypeScript 0.9+には列挙型の仕様があります。
enum AnimationType {
BOUNCE,
DROP,
}
最後のコンマはオプションです。
enum
TypeScriptチームが変更することを明確に示しているため、この段階では構成を使用しないことをお勧めします。
TypeScript 0.9(現在はアルファリリース)以降では、次のような列挙型定義を使用できます。
enum TShirtSize {
Small,
Medium,
Large
}
var mySize = TShirtSize.Large;
デフォルトでは、これらの列挙にはそれぞれ0、1、2が割り当てられます。これらの数値を明示的に設定したい場合は、列挙型宣言の一部として設定できます。
リスト6.2明示的なメンバーを持つ列挙
enum TShirtSize {
Small = 3,
Medium = 5,
Large = 8
}
var mySize = TShirtSize.Large;
これらの例はどちらも、JavaScriptプログラマー向けにTypeScriptから直接持ち上がりました。
これは0.8仕様とは異なることに注意してください。0.8の仕様は次のようになりましたが、実験的であり、変更される可能性が高いため、古いコードを更新する必要があります。
免責事項 -この0.8の例は、TypeScriptコンパイラの新しいバージョンでは機能しません。
enum TShirtSize {
Small: 3,
Medium: 5,
Large: 8
}
var mySize = TShirtSize.Large;
これは現在言語の一部です。このドキュメントについては、TypeScriptLang.org> Basic Types> enumを参照してください。これらの列挙型の使用方法に関するドキュメントからの抜粋:
enum Color {Red, Green, Blue};
var c: Color = Color.Green;
または手動バッキング番号を使用して:
enum Color {Red = 1, Green = 2, Blue = 4};
var c: Color = Color.Green;
たとえば、を使用して列挙名に戻ることもできColor[2]
ます。
これがすべて一緒に行われる方法の例を次に示します。
module myModule {
export enum Color {Red, Green, Blue};
export class MyClass {
myColor: Color;
constructor() {
console.log(this.myColor);
this.myColor = Color.Blue;
console.log(this.myColor);
console.log(Color[this.myColor]);
}
}
}
var foo = new myModule.MyClass();
これはログに記録します:
undefined 2 Blue
これを書いている時点で、Typescript Playgroundは次のコードを生成するためです。
var myModule;
(function (myModule) {
(function (Color) {
Color[Color["Red"] = 0] = "Red";
Color[Color["Green"] = 1] = "Green";
Color[Color["Blue"] = 2] = "Blue";
})(myModule.Color || (myModule.Color = {}));
var Color = myModule.Color;
;
var MyClass = (function () {
function MyClass() {
console.log(this.myColor);
this.myColor = Color.Blue;
console.log(this.myColor);
console.log(Color[this.myColor]);
}
return MyClass;
})();
myModule.MyClass = MyClass;
})(myModule || (myModule = {}));
var foo = new myModule.MyClass();
次のものを使用してid / string列挙型を作成できることに注意してください。
class EnumyObjects{
public static BOUNCE={str:"Bounce",id:1};
public static DROP={str:"Drop",id:2};
public static FALL={str:"Fall",id:3};
}
str
それid
を使用しますか?
abstract class
TypeScriptにはstatic class
?の概念がないので、インスタンス化を防ぐ方が適切でしょう。
更新:
@ iX3で述べたように、Typescript 2.4は列挙型文字列をサポートしています。
元の答え:
文字列メンバー値の場合、TypeScriptは数値を列挙型メンバー値としてのみ許可します。ただし、実装できるソリューション/ハックはいくつかあります。
解決策1:
コピー元:https : //blog.rsuter.com/how-to-implement-an-enum-with-string-values-in-typescript/
簡単な解決策があります:割り当てる前に文字列リテラルをanyにキャストしてください:
export enum Language {
English = <any>"English",
German = <any>"German",
French = <any>"French",
Italian = <any>"Italian"
}
ソリューション2:
コピー元:https : //basarat.gitbooks.io/typescript/content/docs/types/literal-types.html
タイプとして文字列リテラルを使用できます。例えば:
let foo: 'Hello';
ここでは、リテラル値「Hello」の割り当てのみを許可するfooという変数を作成しました。これを以下に示します。
let foo: 'Hello';
foo = 'Bar'; // Error: "Bar" is not assignable to type "Hello"
これらはそれ自体ではあまり有用ではありませんが、型共用体で組み合わせて強力な(そして有用な)抽象化を作成できます。例:
type CardinalDirection =
"North"
| "East"
| "South"
| "West";
function move(distance: number, direction: CardinalDirection) {
// ...
}
move(1,"North"); // Okay
move(1,"Nurth"); // Error!
列挙型はtypescript言語に入れられ、一連の名前付き定数を定義します。列挙型を使用すると、私たちの生活が簡単になります。この理由は、これらの定数は、列挙型が表す値よりも読みやすいことが多いためです。
enum Direction {
Up = 1,
Down,
Left,
Right,
}
typescript docsからのこの例は、列挙型がどのように機能するかを非常にうまく説明しています。最初の列挙値(Up)が1で初期化されていることに注意してください。次に、enumの以下のすべてのメンバーがこの値から自動的にインクリメントされます(つまり、Down = 2、Left = 3、Right = 4)。最初の値を1で初期化しなかった場合、列挙型は0から始まり、自動インクリメントします(つまり、下= 1、左= 2、右= 3)。
次の方法で列挙型の値にアクセスできます。
Direction.Up; // first the enum name, then the dot operator followed by the enum value
Direction.Down;
この方法では、コードの記述方法がはるかにわかりやすくなっています。列挙型は基本的に、マジックナンバー(特定のコンテキストでプログラマーが意味を与えたためにエンティティを表す数字)を使用できないようにします。マジックナンバーは、次の理由により不適切です。