[英]Typescript interface with dynamic keys extending Object
在Typescript中,當使用索引器(鍵為字符串)時,我無法使接口擴展Object。
如果我不擴展Object,那么它將正常工作,但是intellisense不會為Object.hasOwnProperty()方法提供建議。
interface MyObject extends Object {
[key: string] : string;
}
上面的代碼,我得到的編譯時錯誤為:“類型'(v:字符串)=>布爾值'的屬性'hasOwnProperty'無法分配給字符串索引類型'字符串'。”
稍后在代碼中,我想使用Object的hasOwnProperty方法檢查MyObject類型的變量是否包含特定鍵。
您不需要擴展Object
即可具有hasOwnProperty
方法。 由於所有對象都繼承Object
因此該方法將存在於接口的任何實例上。
interface MyObject {
[key: string]: string;
}
var v: MyObject = {
"foo" : "1"
}
v.hasOwnProperty("foo");
索引簽名通常意味着接口的所有成員將與索引的返回類型兼容。 盡管可以使用聯合類型來解決這個問題,但是如果沒有Object.assign
,仍然不能直接創建這樣的對象:
type MyObject = Object & { // Object is useless but we can specify it
[key: string]: string;
} & { // We can specify other incompatible properties
required: boolean
}
// We can create an instance with `Object.assign`
var v: MyObject = Object.assign({
"foo" : "1"
}, {
required: true
});
v.hasOwnProperty("foo");
console.log(v.required);
console.log(v['bar']);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.