簡體   English   中英

以枚舉值作為類型的意外行為(在Typescript中)

[英]Unexpected behaviour with enum values as types (in Typescript)

我在理解枚舉成員的值可用於在Typescript中定義類型的方式時遇到了麻煩。

我了解在Typescript中,您可以通過將原始對象指定為類型值來定義一元類型。 枚舉成員具有與之關聯的數值。

在以下示例中,我將枚舉成員的值別名為類型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,當時他在討論Typescript中的一元類型。)

所有數字都可以分配給枚舉成員。 就像所有數字都可以分配給一個枚舉一樣。 例如

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

const x: blah = 567; // allowed

原因是您要引用變量中的值。

實際上,您正在執行的操作是:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM