Указание ключей в форме массива в PHPstanPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Указание ключей в форме массива в PHPstan

Сообщение Anonymous »

Я хочу аннотировать функцию, которая принимает массив как минимум с ключом «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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»