found = myMap(get(s.key);
if(found) {
found.push(s.val);
} else {
myMap.set(s.key, [s.val]);
}
Но универсального какого-нибудь решения нет? Чтобы ТС знал, что если я добавил по ключу в Map/Set, то get по этому же ключу не выдаст undefined.
Можно написать свою мапу (обёртку вокруг существующей), типизированную юнионом строковых или численных ключей, которые в ней лежат. На каждый set, конечно, придётся возвращать объект, имеющий другой тип, не тот, что до set'а, и не очень понятно, что дальше с этой мапой делать — не писать же полный тип, включая ключи, каждый раз. Но можно :)
const myMap = new Map<number, string[]>(); function getOrInit<K, V>(map: Map<K, V>, key: K, init: V): V { if (!map.has(key)) map.set(key, init); return map.get(key) as V; } for (const { key, value } of strings) { getOrInit(myMap, key, []).push(value); } да что-нибудь такое я написал бы
Обсуждают сегодня