vimeo/psalm
Calling to `Map::union/intersect/diff()` etc. modifies args generic type
Aperta
#6381 aperta il 31 ago 2021
Help wantedbugtype reconciliation
Metriche repository
- Star
- (5369 stelle)
- Metriche merge PR
- (Metriche PR in attesa)
Descrizione
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