2016-12-06 89 views
2

鍵名稱下面的代碼工作以及在Visual Studio代碼:推斷與打字稿

type MyType = { 
    id: number; 
    name: string; 
}; 

type MyTypes = { [name: string]: MyType }; 

const MY_TYPES:MyTypes = { 
    ONE: { id: 0, name: 'name0' }, 
    TWO: { id: 1, name: 'name1' } 
}; 

console.log(MY_TYPES.ONE); //Intellisense error 
console.log(MY_TYPES['ONE']); 

兩個日誌報表編制和輸出同樣的事情,但第一個生成VS代碼和狀態「屬性是一個錯誤類型'上不存在'ONE'。是否有任何其他方式來構建我的代碼,以便VS代碼可以自動推斷/自動完成MY_TYPES具有屬性名稱ONE和TWO?

回答

0

如果您正在使用indexed object,那麼你可以使用索引只能訪問屬性:

type MyTypes = { [name: string]: MyType }; 
console.log(MY_TYPES["ONE"]); 

這是因爲編譯器只知道對象具有字符串類型的鍵,它不知道具體的鑰匙。

如果您希望能夠訪問使用點符號的屬性,那麼你需要做的是:

type MyTypes = { 
    ONE: MyType; 
    TWO: MyType; 
} 
console.log(MY_TYPES.ONE); 

但是,您可以只是這樣做:

type MyTypes = { 
    ONE: MyType; 
    TWO: MyType; 
} 

const MY_TYPES = { 
    ONE: { id: 0, name: 'name0' }, 
    TWO: { id: 1, name: 'name1' } 
}; 

,編譯器將會推斷出MY_TYPES的類型。

+0

謝謝。我決定使用你的方法,而是將MyTypes聲明爲接口。正如我所理解的那樣,它也可以提供更多的靈活性。 – n83