1. ホーム
  2. typescript

[解決済み] TSにおける文字列列列挙型と文字列リテラル型の相違点

2022-12-05 15:05:35

質問

私が myKey{ myKey: '' } には、文字列 foo , bar , baz のように、2つの方法で実現できます。

   // with a String Literal Type 
   type MyKeyType = 'foo' | 'bar' | 'baz';

    // or with a String Enum   
    enum MyKeyType {
       FOO = 'foo',
       BAR = 'bar',
       BAZ = 'baz'
    }

私にはどちらも同じに見えるので、どちらか一方を選ぶことの長所と短所はどこにあるのでしょうか (たとえば、条件チェックのために値にアクセスする方法を除いて)。

私がTSドキュメントで見つけた唯一の違いは、Enumsは実行時に実際のオブジェクトであり、いくつかのケースでは望ましいことかもしれないということです。

どのように解決するのですか?

理解すべき重要なことは 文字列列の列挙型の値は不透明である。 .

文字列列列挙型の使用例としては、文字列列列挙型がどのような値を返すかを他のコードに知らせたくない、あるいは知らせたくないというものがあります。 MyKeyType.FOO が何であるかを他のコードに知らせたくない、あるいは気にさせたくないということです。つまり、たとえば というリテラル文字列 "bar" を受け付ける関数に MyKeyType -- を受け取る関数に変更する必要があります。 MyKeyType.BAR と書く必要があります。