[解決済み] TypeScriptでEnumを比較する方法
質問
TypeScriptで、enumの値を含む2つの変数を比較したいです。以下は私の最小限のコード例です。
enum E {
A,
B
}
let e1: E = E.A
let e2: E = E.B
if (e1 === e2) {
console.log("equal")
}
でコンパイルする場合
tsc
(v 2.0.3)でコンパイルすると、以下のエラーが発生します。
TS2365です。演算子 '==='は、型 'E.A' と 'E.B' に適用できません。
と同じです。
==
,
!==
と
!=
.
を追加してみました。
const
キーワードを追加してみましたが、何の効果もないようです。
その
TypeScriptの仕様
には以下のように書かれています。
4.19.3 <、>、<=、>=、==、!=、===、!== 演算子
これらの演算子は、オペランド型の一方または両方が他方に代入可能であることを必要とする。結果は常にBooleanプリミティブ型になります。
これがエラーを説明するものです(と私は思います)。しかし、どのように私はそれを回避することができますか?
サイドノート
私はAtomエディタで
atom-typescript
で、エディタではエラーや警告が出ません。しかし、私が実行するとき
tsc
を実行すると、上記のようなエラーが発生します。私は、これらは同じ
tsconfig.json
ファイルを使用するものと思っていましたが、どうやらそうではないようです。
どのように解決するのですか?
生成されたjavascriptのコードに一切影響を与えたくない場合は、タイプキャストを使用する方法もあります。
let e1: E = E.A
let e2: E = E.B
if (e1 as E === e2 as E) {
console.log("equal")
}
一般に、これはコントロールフローに基づく型推論によって引き起こされます。現在のtypescriptの実装では、関数呼び出しが絡むとOFFになるので、このようなことも可能です。
let id = a => a
let e1: E = id(E.A)
let e2: E = id(E.B)
if (e1 === e2) {
console.log('equal');
}
不思議なのは、まだ
id
関数がその引数と正確に同じ型を返すと宣言されている場合、エラーにならないことです。
function id<T>(t: T): T { return t; }
関連
-
[解決済み] enumを列挙するには
-
[解決済み] intをenumにキャストするにはどうすればよいですか?
-
[解決済み] JavaScriptで2つの日付を比較する
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] TypeScriptで文字列を数値に変換する方法とは?
-
[解決済み] TypeScript で `window` に新しいプロパティを明示的に設定するにはどうすればよいですか?
-
[解決済み] TypeScriptでの取得と設定
-
[解決済み] Javaで文字列を比較するには?
-
[解決済み】TypeScriptのインターフェースと型について
-
[解決済み] ...は非モジュールのエンティティに解決され、このコンストラクトを使用してインポートすることはできません」とはどういう意味ですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] describe'という名前が見つかりません。テストランナー用の型定義をインストールする必要がありますか?
-
[解決済み] TypeScriptでObject.keysがkeyof型を返さないのはなぜですか?
-
[解決済み] Promiseの型はどのようにアンラップするのですか?
-
[解決済み] Typescript で Enum を制限付きキータイプとして使用する
-
[解決済み] TypeScriptで単一のプロパティをオプションにする
-
[解決済み] TypeScript 2: 型付けされていない npm モジュールのためのカスタム型付け
-
[解決済み] Angular2 - Http POST リクエストパラメータ
-
[解決済み] TypeScriptの"=>"の意味とは?(ファットアロー)
-
[解決済み] TypeScriptでクラスを角括弧「<>」で囲むとはどういう意味ですか?
-
[解決済み] VSCodeでTypeScriptの警告を無効にするには?