2016-06-07 48 views
0

有沒有一種方法來同時使用強類型索引訪問器和訪問屬性,而不重複類型註釋中的屬性?Typescript - 屬性和索引訪問器在同一時間

let profile = profiles[profileKey]; 
let profile = profiles.ADMIN; 

我有這樣定義的鍵值對詞典:

const profiles = { 
    "ADMIN": "Admin", 
    "TCA": "Test Center Admin", 
    "TT": "Test Taker", 
}; 

現在型材常量的性質infered和我可以寫let admin = profiles.ADMIN

但爲了使用索引acessor我必須明確地指定它:

const profiles: {[profileKey: string]: string} = { 
    "ADMIN": "Admin", 
    "TCA": "Test Center Admin", 
    "TT": "Test Taker", 
}; 

不過,現在我不能訪問性能。

我知道我可以定義在profiles`類型標註的所有屬性:

interface IProfiles { 
    [profileKey: string]: string; 
    ADMIN: string, 
    TCA: string, 
    TT: string, 
} 

但這只是在重複自己。可以推斷屬性,就像我沒有指定任何註釋一樣。這可能嗎?

回答

0

可以推斷屬性。這可能

打字稿不意味着什麼是字符串profileKey的可能值:

Object.keys(profiles).map(profileKey => 

技術細節:這是因爲Object.keys函數的定義。

所以profileKey只是一些字符串(不限於三個值),所以TypeScript不能應用這個鍵的約束 - 該值。如果你想爲所有字符串提供一個約束條件,你必須提供索引器定義

+0

我並不期望推斷profileKey的可擴展值,但可能的屬性('profiles.ADMIN','profiles.TCA'和' profiles.TT')。只要我沒有指定索引存取器,我可以使用這些屬性。 – Liero