我想這個代碼:如何訪問使用Typescript中的接口聲明的屬性的屬性?
export interface IEnumElement {
elem: string;
text: string;
val: number
}
export interface IIndexable<T> {
[index: string]: T;
}
export class AdminBase {
ExamStatusId: IIndexable<IEnumElement> = {
All: {
elem: "",
text: 'Exam Status: All',
val: 0
},
Current: {
elem: "asdf",
text: 'Exam Status: Current',
val: 1
}
}
}
var x = new AdminBase();
var y = x.ExamStatusId.All;
它給了我一個錯誤說:
Error 1 The property 'All' does not exist on value of type
'IIndexable<IEnumElement>'. C:\Protractor\TypeScript1.ts
注意ExamStatusId現在只有兩個特性,但有可能是任何數量的不同性質的後面。
我們在這裏看到的是,您正在使用「考試」類型。這是一種定義的類型*原樣* ...但這不是OP案例 - 即使這可以解決問題;)。我試圖解釋TypeScript字典是如何工作的 - 例如類型如'IIndexable'。所以,雖然你的例子工作正在改變實現(這仍然是正確的);) –
TypeScript允許我們將許多現有的基於類的知識帶入JavaScript。我們應該在可能的情況下留下我們對名義類型系統的認識,並採用結構類型系統。如果我們使用TypeScript是因爲它給了我們靜態類型檢查,那麼任何需要魔術字符串的解決方案都不如靜態類型的解決方案。另外,實現沒有什麼不同,它只是由編譯器而不是程序員表達。 – Fenton