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 і докблоки. Вони перевіряються статично, а не в runtime.
/** @template T */
class Collection {
/** @param T $item */
public function add($item): void { ... }
}Колекції, репозиторії, Result types, будь-який контейнер. Java, C#, TypeScript, Go (з версії 1.18) мають вбудовані generics.