Вопрос с собеседования · Frontend
Что такое дженерики в TypeScript и зачем они нужны?
JuniorTypeScript
Ещё спрашивают так:
- Как написать обобщённую функцию в TypeScript?
Коротко
Дженерик — параметр типа: функция или тип работает с разными типами, сохраняя связь между входом и выходом. function first<T>(xs: T[]): T | undefined — для string[] вернёт string, для User[] — User. Без дженерика пришлось бы писать any и терять проверку. Ограничение: <T extends { id: string }> — T обязан иметь id.
- Примеры из библиотек: Array<T>, Promise<T>, useState<T>
- Тип часто выводится сам, указывать явно не нужно
- Дженерик-тип: type ApiResponse<T> = { data: T; error?: string }
Подробно
async function getJson<T>(url: string): Promise<T> {
const r = await fetch(url);
return r.json() as Promise<T>;
}
const user = await getJson<User>('/api/me'); // user: UserЧто хотят услышать
- Параметр типа и связь входа с выходом.
- Альтернатива any.
- Ограничения extends.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Параметр типа связывает вход и выход без потери проверки; extends задаёт ограничения
- ✗Дженерики — то же самое, что any, только с другим синтаксисом
- ✗Дженерики проверяются во время выполнения, как instanceof
- ✗Тип в дженерике всегда нужно указывать явно, вывод для дженериков не работает
Связанные вопросы
Партнёр платформы
Разбор собеседования
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.