2017-12-15 8 views
1

はなぜ活字体コードのこの作品は許可されている:なぜ範囲外の値をTypeScript列挙型に割り当てることができますか?

const enum Foobar { 
    Foo = 0, 
    Bar = 1 
} 

let a: Foobar = 42; 
const b: 42 = 42; 
a = b; 

私は列挙型が動的にすることができることを理解します。しかし、私は、この例題がTypeScriptコントロールフロー分析を使用して許可されるべきではないと感じています。

答えて

2

これは、TSがビットフラグと非ビットフラグの列挙を区別しないために可能です。

、範囲外の値は、一般的にビットフラグ列挙で発生:

ここ
const enum Foobar { 
    Foo = 0, 
    Bar = 1, 
    Baz = 2, 
    Qoo = 4 
} 

let a: Foobar = Foobar.Qoo | Foobar.Baz; 

aは明らかに値6を有し、これは列挙の意図を明らかに違反ではありません。

+0

したがって、C#の '[Flags]'列挙型と同等の機能はありますか?ご回答有難うございます。 TypeScript教材で使用します:+1: – nicojs

関連する問題