vimeo/psalm

Calling to `Map::union/intersect/diff()` etc. modifies args generic type

開放

#6,381 建立於 2021年8月31日

 (5 則留言) (0 個反應) (0 位負責人)PHP (668 個分叉)batch import
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

貢獻者指南