簡體   English   中英

有沒有告訴 typescript 所有數組元素都存在於 Map 中的好方法?

[英]Is there a good way of telling typescript all array elements exist in a Map?

假設我正在從以 id 作為鍵的對象數組創建 Map,然后從具有相同 id 的不同數組訪問 map:

const arr1 = [
  {id: 'a', firstName: 'Jeff'},
  {id: 'b', firstName: 'John'},
  {id: 'c', firstName: 'Jeremy'}
];

const map1 = new Map(arr1.map(element => [element.id, element]));

const arr2 = [
  {id: 'b', lastName: 'Johnson'},
  {id: 'c', lastName: 'Jackson'},
  {id: 'd', lastName: 'Jenkins'}
];

const arr2InMap1 = arr2.filter(element => map1.has(element.id));
arr2InMap1.forEach(element => console.log(`${map1.get(element.id).firstName} ${element.lastName}`));

如果我有“strictNullChecks”:true,那么最后一行會拋出一個“對象可能是'未定義'”錯誤,即使它永遠不會是未定義的。 有沒有辦法告訴 typescript 數組中的元素存在於 map 中?

我知道我可以使用“,”運算符。 或創建只返回 T 而不是 T | 的 function | 未定義替換 Map,明白嗎? 但是有沒有更好的方法來實現這一點?

不,這是Map.get的簽名。 如果這很麻煩,簡單的 object 可能更適合您的情況:

TS游樂場

const obj1 = arr1.reduce(
  (obj, value) => (obj[value.id] = value) && obj,
  {} as Record<string, typeof arr1[number]>,
);

const arr2InMap1 = arr2.filter(element => element.id in obj1);
arr2InMap1.forEach(element => console.log(`${obj1[element.id].firstName} ${element.lastName}`));

暫無
暫無

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

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