2016-11-15 200 views
1

我試圖使用Enum值作爲文字類型,如下所示。不過,我得到以下錯誤:Enum type 'Enum' has members with initializers that are not literals.枚舉類型'枚舉'具有非文字初始值設定項的成員

declare const enum Enum { 
    A, 
    B 
} 

interface Test { 
    prop: Enum.A; 
} 

這工作如果我這樣做,雖然以下幾點:

declare const enum Enum { 
    A=0, 
    B=1 
} 

interface Test { 
    prop: Enum.A; 
} 

爲什麼這個解決這一問題?不使用const enum將不同的枚舉值設置爲0,1,2等?

注:此代碼是一個.d.ts文件

+0

我認爲你需要刪除'declare'關鍵字,也許? – Amy

+0

我想我應該提到我在.d.ts文件中執行此操作。如果我在.ts文件中執行它,並刪除聲明它的作品。 – Bromano

+0

啊,好吧。那是有道理的。 (對於內聯代碼,您可以使用單個反引號) – Amy

回答

3

打字稿肯定知道內部的東西都0,1,2實際枚舉例如

const enum Enum { 
    A 
} 

interface Test { 
    prop: Enum.A; 
} 

這是因爲它的編譯上下文中有A = 0。然而,對於一個聲明

declare const enum Enum { 
    A 
} 

interface Test { 
    prop: Enum.A; // ERROR 
} 

它在其控制的,因此它不能肯定不看執行您提供它的提示,它需要:

declare const enum Enum { 
    A = 0 
} 

interface Test { 
    prop: Enum.A; // OKAY 
}