簡體   English   中英

將數組轉換為 Map Typescript

[英]Convert Array to Map Typescript

我正在嘗試將以下數組轉換為 Map:

const arr = [
  { key: 'user1', value: { num: 0, letter: 'a' } },
  { key: 'user2', value: { num: 0, letter: 'b' } },
  { key: 'user3', value: { num: 0, letter: 'c' } },
];

到目前為止我所擁有的:

const arr = [
  { key: 'user1', value: { num: 0, letter: 'a' } },
  { key: 'user2', value: { num: 0, letter: 'b' } },
  { key: 'user3', value: { num: 0, letter: 'c' } },
];
const b = arr.map(obj => [obj.key, obj.value]);
const map = new Map<string, { num: number; letter: string }>(b);

console.log(map.get('user1'));

你知道這是否可以實現嗎?

PS:你可以在這里找到 Typescript 游樂場和我得到的錯誤

obj.key是一個stringobj.value是一個{num: number, letter: string} ,所以如果你把它們組成一個數組( [obj.key, obj.value] ),那么你會得到一個Array<string | {num: number, letter: string}> Array<string | {num: number, letter: string}> .

您需要告訴 TypeScript 您正在創建一個特定的tuple ,正如 Map 構造函數所期望的那樣,而不是通用數組。 有幾種方法可以做到這一點:

// The simplest: Tell TypeScript "I mean exactly what I said."
// (This makes it readonly, which isn't always desirable.)
const b = arr.map(obj => [obj.key, obj.value] as const);

// Or be explicit in a return type. You can do this at a few levels.
const b = arr.map<[string, { num: number, letter: string}]>(obj => [obj.key, obj.value]);
const b = arr.map((obj): [string, { num: number, letter: string}] => [obj.key, obj.value]);

// Or, as explained in the comments, do it in one line, and TypeScript
// can infer tuple vs. array itself.
const map = new Map(arr.map(obj => [obj.key, obj.value]));

暫無
暫無

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

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