[解決済み] 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
と書く必要があります。
関連
-
[解決済み] コンストラクタとngOnInitの違いについて
-
[解決済み] "require(x)" と "import x" の違いについて
-
[解決済み] String型とstring型の違いは何ですか?
-
[解決済み] 文字列ユニオンから文字列配列へ
-
[解決済み] TypeScriptでObject.keysがkeyof型を返さないのはなぜですか?
-
[解決済み] モジュールと名前空間 - Import vs Require Typescript
-
[解決済み] typescriptのインターフェイスを別ファイルで宣言しインポートする方法
-
[解決済み] Typescript で Enum を制限付きキータイプとして使用する
-
[解決済み] エラー Typescript Feature 1.5。現在の言語レベルは1.4です。
-
[解決済み] 2つのインターフェイスを統合する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] TypeScriptの予約語 "type "とは何ですか?
-
[解決済み] Typescriptでインターフェースやクラスを使用する場合 [重複].
-
[解決済み] Typescript のプリミティブ型:"number" と "Number" の違い(TSC は大文字と小文字を区別しない)?
-
[解決済み] タイプスクリプト。カスタムタイプに対する typeof のチェック
-
[解決済み] モジュールと名前空間 - Import vs Require Typescript
-
[解決済み] typescriptのインターフェイスを別ファイルで宣言しインポートする方法
-
[解決済み] tsconfigの "target "と "module "を理解する。
-
[解決済み] Typescript で Enum を制限付きキータイプとして使用する
-
[解決済み] TypeScriptで強く型付けされた配列の作成
-
[解決済み] Python、Enum型は何のためにあるのか?重複