vimeo/psalm
Calling to `Map::union/intersect/diff()` etc. modifies args generic type
Ouverte
#6 381 ouverte le 31 août 2021
Help wantedbugtype reconciliation
Métriques du dépôt
- Stars
- (5 369 étoiles)
- Métriques de merge PR
- (Métriques PR en attente)
Description
interface A {
/**
* @param TReturn $value
*
* @return Map<TReturn, TReturn>
*
* @template TReturn
*/
public static function fc(mixed $value) : Map
{
}
}
/** @var A $a */
$a;
$result = $a::fc(true);
Type of $result is correctly Ds\Map<true, true>.
Though, when I route $result through any mutation-free function on another map instance ((new Map)->union($result)), it changes to Ds\Map<mixed, mixed>. I don't see any reason for type change.
https://psalm.dev/r/4243e3b2a8
https://psalm.dev/r/123220a2c8