Я хочу аннотировать функцию, которая принимает массив как минимум с ключом «a» и возвращает ту же форму массива с новым добавленным ключом «x». Я попробовал использовать пересечение типов следующим образом:
Код: Выделить всё
/**
* @template T of array{a: string}
* @param T $p
* @return T&array{x: int}
*/
function addXToArray(array $p) {
$p['x'] = strlen($p['a']);
return $p;
}
$result = addXToArray(['a' => 'hello']);
Очевидно, что это неправильный путь, потому что PHPstan жалуется (на уровне 10 с «Относиться к типам PHPDoc как к определенным»):
Код: Выделить всё
PHPDoc tag @return contains unresolvable type.
Я использую шаблон T, потому что мне нужно сохранить любые другие ключи, которые могут присутствовать в аргументе.
Как это сделать правильно аннотировать функцию?
Подробнее здесь:
https://stackoverflow.com/questions/793 ... in-phpstan