2014-09-10 53 views

回答

8

這是語言規範的一部分(3.2.7枚舉類型):

枚舉類型是可分配給編號基本類型,反之亦然 ,但不同的枚舉類型是不能分配給彼此

因此,決定允許在numberEnum之間進行隱式轉換,反之亦然是故意的。

這意味着您需要確保該值有效。

function test(x: xEnum) { 
    if (typeof xEnum[x] === 'undefined') { 
     alert('Bad enum'); 
    } 
    console.log(x); 
} 

雖然你可能不執行達成一致,但值得注意的是,枚舉在這三種情況下非常有用:

// 1. Enums are useful here: 
test(xEnum.X2); 

// 2. ...and here 
test(yEnum.X2); 

和3 - 當你輸入test(它會告訴你枚舉你可以用來保證你選擇一個存在的類型。

+0

OK,THX指出了這一點。這是一個明智的決定嗎?我的意思是,在這種情況下,枚舉類型根本沒有用處。 – duedl0r 2014-09-10 10:39:01

+1

這是明智的,你主要使用網絡服務器,然後它只是一個數字 – basarat 2014-09-10 12:05:14

+0

我添加了三個枚舉比數字更好的情況。我知道如果不包括你的情況(如果語言規範改變以去除隱含的'number' - >'enum'轉換,它可以做到這一點),但仍然有一些有用的理由來使用它。他們不是「壞」,只是「不如你想要的完美」:) – Fenton 2014-09-10 12:36:55