文字列を文字列リテラル結合体に絞りたいと思っています。言い換えれば、文字列がリテラルユニオンの可能な値の1つであるかどうかをチェックしたいので、これは動作します(オペレータcouldbe
が存在する場合)。文字列を文字列リテラル結合に絞る
type lit = "A" | "B" | "C";
let uni: lit;
let str = "B";
if(str couldbe lit){
uni = str;
} else {
doSomething(str);
}
どのようにすればいいですか?
私はif (str instanceof lit)
を使ってみましたが、うまくいかないようです。 keyof
を使用して文字列共用体を反復処理することは、許可された値がキーそのものではないため、どちらも機能しません。
switch
を1つの可能な値ごとに1つ使用することもできますが、許容値が変更されると微妙なエラーが発生する可能性があります。
実行時に 'lit'という型は存在しませんので、そのように使うことはできません。代わりにenumを使用するかもしれませんか? –
switch文のコメントについては、この[answer](https://stackoverflow.com/questions/39419170/how-do-i-check-that-a-switch-block-is-exhaustive-in-typescript)を参照してください。 –
@NitzanTomerこれは実際には非常に良いアイデアですが、はるかにクリーンで理解しやすいようです。 – iFreilicht