vimeo/psalm
Calling to `Map::union/intersect/diff()` etc. modifies args generic type
開放
#6,381 建立於 2021年8月31日
Help wantedbugtype reconciliation
倉庫指標
- 星標
- (5,369 顆星)
- PR 合併指標
- (PR 指標待抓取)
描述
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