TypeScriptの種類のようなenumを作成する方法は?
-
12-12-2019 - |
質問
Tysscript用のGoogle Maps APIの定義ファイルに取り組んでいます。
と私はタイプのような列挙型を定義する必要があります。2つのプロパティを含むgoogle.maps.Animation
:BOUNCE
とDROP
。
これはどのようにタイプスクリプトで行うべきですか?
解決
TypesScript 0.9以降は列挙メントの仕様を持っています:
enum AnimationType {
BOUNCE,
DROP,
}
.
最後のコンマはオプションです。
他のヒント
Tysscript 0.9(現在アルファリリース)のような列挙型定義を使用することができます。
enum TShirtSize {
Small,
Medium,
Large
}
var mySize = TShirtSize.Large;
.
デフォルトでは、これらの列挙型はそれぞれ0,1、および2に割り当てられます。これらの数字を明示的に設定したい場合は、ENUM宣言の一部として行うことができます。
明示的なメンバーを持つ6.2列挙型
enum TShirtSize {
Small = 3,
Medium = 5,
Large = 8
}
var mySize = TShirtSize.Large;
.
これらの例は両方とも JavaScriptプログラマで直接持ち上げました。
これは0.8仕様とは異なります。 0.8仕様はこのように見えました - しかし、それは実験的で変化する可能性があるので、古いコードを更新する必要があります。
これは現在言語の一部です。 typtionscriptlang.org>基本型> 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
これを書くときには、タイプスクリプトプレイグラウンドがこのコードを生成します。
.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 /文字列列挙型を使用できる別の注意:
class EnumyObjects{
public static BOUNCE={str:"Bounce",id:1};
public static DROP={str:"Drop",id:2};
public static FALL={str:"Fall",id:3};
}
. 更新:
@ ix3によって指摘されているように、 tysscript 2.4 は列挙型文字列をサポートしています。
元の答え:
文字列メンバ値の場合、TypeScriptはenumメンバー値として数値のみを許可します。しかし、あなたが実装することができるいくつかの解決策/ハックがあります;
解決策1:
からコピーしました。 HTTPS: //blog.rsuter.com/how-toimplement-an-enum-with-string-values-in-typescript/
簡単な解決策があります。割り当て前に文字列リテラルをキャストするだけです。
.
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';
ここでは、fooという変数を作成しました。これは、リテラル値 'hello'を割り当てることのみを許可するだけです。これについては以下に説明されています:
.
let foo: 'Hello';
foo = 'Bar'; // Error: "Bar" is not assignable to type "Hello"
彼らは自分のものではあまり役に立ちませんが、タイプ連合で組み合わせることができ、強力な(そして有用な)抽象化e.:
.type CardinalDirection =
"North"
| "East"
| "South"
| "West";
function move(distance: number, direction: CardinalDirection) {
// ...
}
move(1,"North"); // Okay
move(1,"Nurth"); // Error!
TypeScript:の列挙型:
列挙体はTypeScript言語に入れられ、名前付き定数のセットを定義します。 enumsを使うことは私たちの人生をより簡単にすることができます。その理由は、これらの定数が列挙体が表す値よりも読みやすく読みやすいことです。
ENUMの作成:
enum Direction {
Up = 1,
Down,
Left,
Right,
}
.
enum Direction {
Up = 1,
Down,
Left,
Right,
}
TypeScript Docsからのこの例では、列挙型の作業方法を非常にうまく説明しています。最初のENUM値(UP)が1で初期化されていることに注意してください。次に、次の数の列挙体のすべてのメンバーは、この値から自動インクリメントです(つまり、down= 2、左= 3、右= 4)。 。 1で最初の値を初期化しなかった場合、列挙体は0から始まり、自動増分(すなわち、下= 1、左= 2、右= 3)で始まります。
ENUMを使用する:
次の方法で列挙体の値にアクセスできます。
Direction.Up; // first the enum name, then the dot operator followed by the enum value
Direction.Down;
.
このように私たちがコードを書く方法で、私たちははるかに説明です。 ENUMSは基本的に Magic Numbers (プログラマが特定のコンテキストでそれらに意味を与えているため)を使用するのを防ぎます。以下の理由から、マジックナンバーは悪いです。
- 私たちはより難しいと思う必要がある、私たちは私たちのコードについての理由で数を最初に企業に翻訳する必要があります。
- 長くなった後、またはその他のプログラマーがコードを見直すと、これらの数字を意味するのは必ずしもわかりません。
Direction.Up; // first the enum name, then the dot operator followed by the enum value
Direction.Down;