function firstItem(arr: T[]): T | null {
return arr.length ? arr[0] : null;
}
const n = firstItem([1, 2, 3]); // number
const s = firstItem(['a', 'b']); // string PHP не имеет встроенных generics, но PHPStan/Psalm поддерживают их через аннотации @template и docblock-и. Они проверяются статически, а не в runtime.
/** @template T */
class Collection {
/** @param T $item */
public function add($item): void { ... }
}Коллекции, репозитории, Result types, любой контейнер. Java, C#, TypeScript, Go (с версии 1.18) имеют встроенные generics.