2017-06-20 5 views
0

Typescriptで型を定義するためにenumsメンバの値を使用する方法を理解することに苦労しています。enum値を型として(Typescriptで)予期しない動作が発生する

私はTypescriptでは、プリミティブオブジェクトを型の値として指定することで単項型を定義できることを理解しています。また、enumメンバーには数値が関連付けられています。

次の例では、タイプがnewTypeの列挙型メンバーのエイリアスです。変数dで最後の行に何が起こるかを除いて、すべて意味があります。

const enum blah { 
    test = 1, 
}; 

type newType = blah.test; 

var a: newType = 'a'; // ERROR (Type '"a"' is not assignable to type 'blah'.) 
var b: newType = blah.foo; // ERROR (Property 'foo' does not exist on type 'typeof blah'.) 
var c: newType = blah.test; // WORKS 
var d: newType = 123; // WORKS...??? 

最後の割り当てはエラーなしで機能します。それについての説明は何ですか?

(元の例では、活字体で単項の種類についての議論の間に、私の同僚の@michaelkyriacouから来ました。)

+0

ので、あなたの例では、理にかなってちょうど '' number'あなたの例ではnewType'ありませんか? – Raven

+0

@Raven私が期待しているのは、型が値 '1'であり、 'number'ではないということです。これは、 'type newType = 1'を実行すると起こります。 –

答えて

1

すべての数値は、列挙型のメンバーに割り当てることができます。ちょうどすべての数字が列挙型に割り当てられるように。例えば

const enum blah { 
    test = 1, 
    foo = 2 
}; 

const x: blah = 567; // allowed 
+0

私の例の変数の型は列挙型ではなく、列挙型のメンバーです。また、私はそれが固定値であり、タイプ番号ではないと考えています。 –

+0

私のコメントは@ unionalの回答 –

0

これは、変数の値を参照しているためです。何をやっている

は基本的に次のとおりです。

let x = 1 // type of x is number, not 1 
type z = typeof x // the z is of type number. 
+0

も参照してください私はなぜそれが起こるはずはない、私は 'newType = blah.test'は' newType = 1'と同じで、 'newType = typeof 1 '。 –

関連する問題