は、オン:両方のケースが同じように動作するようには思えTypeScriptに文字列ベースの列挙型が追加されたため、文字列リテラルを使用する理由はありますか?私はこのコードを持っている場合、私はコンパイラオプションnoImplicitReturnを持っていると仮定すると
enum ListA {
option1 = "opt1",
option2 = "opt2",
option3 = "opt3"
}
type ListB = "opt1" | "opt2" | "opt3";
function transformA(x: ListA): number {
switch (x) {
case ListA.option1:
return 1;
case ListA.option2:
return 2;
}
}
function transformB(x: ListB): number {
switch (x) {
case "opt1":
return 1;
case "opt2":
return 2;
}
}
、それらは両方とも判別組合と考えていると徹底的にチェックされます。
コンパイラはtransformAとtransformBの両方の関数でエラーを発生させます。両方の可能なケースを処理しないためです。
だから今、文字列リテラルを使用する理由はありますか?それとも味の問題ですか?
この場合、可能な値が変更された場合にリファクタリングを容易にするため、この列挙型を使用する傾向があります。あなただけの文字列値を持っていない場合
これはもはや文字列リテラルではなく、異なるタイプの共用体です。 – vintem
私は、文字列の列挙型を使用できない方法で文字列型を使用できることを指摘していました。文字列列挙型では、文字列型に限られており、他のリテラル値型と混合して興味深い結果を得ることができます。 –