O seguinte leva a um erro com this.#map
:
type MapType<K, V> = K extends object ? (Map<K, V> | WeakMap<K,V>) : Map<K,V>
export function getOrSet<K, V> (map: MapType<K, V>, key: K, create: (k: K) => V): V {
if (!map.has(key)) { map.set(key, create(key)) }
return map.get(key)
}
export class Select<T extends object> {
#map = new WeakMap<T, any>()
observable (item: T) { return getOrSet(this.#map, item, () => 'any') }
}
Mas isso está incorreto porque T extends object
o erro desaparece quando o alteramos para WeakMap<object, any>
.
Existe alguma correção/solução alternativa aqui?
Observando que usar uma sobrecarga ou K & object
move o erro para getOrSet
: