簡體   English   中英

typescript:聲明類似地圖的類型 object

[英]typescript: declare type of map-like object

我正在使用 object 來存儲 map,鍵是字符串,值具有固定類型 T。

在 object 中查找鍵時,類型推斷為其分配類型 T。但它可能未定義。
在以下示例中,我希望 entry 的類型number|undefined 但 typescript 推斷number 這似乎不正確:

const data: {[index:string]: number} = {
    "aa34da": 1,
    "basd23": 2,
    "as34sf": 5
};

const entry = data["doesn't exist"];
console.log(entry);

這是類型推斷中的錯誤嗎?

我知道 ES6 Map,它提供了一個完全符合我期望的簽名的get()方法。 但是 Map 與 JSON 序列化並不能很好地配合。 我寧願只使用對象。

正如您已經發現的那樣,類型推斷沒有錯誤,因為data的類型被明確設置為“在任何字符串鍵處包含數字的對象”。 所以我們應該讓 typescript 知道值可能是undefined的:

declare const data: { [index: string]: number|undefined };

您還可以使用Record實用程序來定義這樣的類型:

declare const data: Record<string, number | undefined>;

Record<K, T>構造一個具有一組 T 類型的屬性 K 的類型。

在玩了一些代碼之后,我認為聲明類似地圖的 object 的正確方法是,其中一些鍵可能不指向值:

const data: {[index:string]: number|undefined} = {
    "aa34da": 1,
    "basd23": 2,
    "as34sf": 5
}

const entry = data["doesn't exist"];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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