簡體   English   中英

具有擴展對象的動態鍵的Typescript接口

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM