根據使用對象字面值時的Typescript文檔,它應該完全匹配接口。但對於下面的代碼操場上不顯示任何錯誤消息:Typescript編譯器不顯示錯誤
下面支撐是字符串,因此它與[index: number]: number
這意味着該指數應該是指數在數量和價值應該是一些衝突,屬性除name
和age
以外。
這是一個錯誤?如果我錯了,請解釋這是如何工作的?
根據使用對象字面值時的Typescript文檔,它應該完全匹配接口。但對於下面的代碼操場上不顯示任何錯誤消息:Typescript編譯器不顯示錯誤
下面支撐是字符串,因此它與[index: number]: number
這意味着該指數應該是指數在數量和價值應該是一些衝突,屬性除name
和age
以外。
這是一個錯誤?如果我錯了,請解釋這是如何工作的?
您始終可以指定比接口要求更多的屬性。作爲示範,看看下面的代碼:(or on the playground)
// index.ts
interface MyInterface {
obligatoryProperty: string
optionalProperty?: string
[index: number]: number
}
let impl1: MyInterface = {} // fails compilation
let impl2: MyInterface = { obligatoryProperty: 'hello' } // compiles fine
let impl3: MyInterface = {
obligatoryProperty: 'hello',
optionalProperty: 'hello',
2: 2,
3: 3,
notSpecifiedPropertyThatIsAlsoNotANumber: 'hello',
} // Still fine
因爲他們決定做「隱指數的簽名」,這是一件好事!你可以閱讀這裏的原因:
https://github.com/Microsoft/TypeScript/issues/7059
但如果你創建具有number
關鍵和非number
作爲值的屬性的打字稿編譯器會顯示錯誤。 Here is an example in the playground.
附註: TypeScript試圖解放它可以的地方。您可以省略函數簽名中的參數。請參閱此example。
請勿發佈代碼圖片。 – 2016-08-22 13:03:47
我發佈它指出沒有錯誤正在操場上顯示。 –
爲遊樂場示例生成鏈接非常簡單。這樣,試圖回答您的問題的人可以快速檢查代碼。否則,只需在這裏粘貼代碼,那麼審閱者就可以嘗試編譯它,這總是比圖片更好的選擇。 –