значение такого же типа как и вводные параметры?(пропсы)
Дженерики — это особые средства языка для реализации обобщённого программирования. Особого подхода позволяющего работать с различными типами данных без изменения их описания.
Что конкретно не понятно?) Это общий тип, в который можно передавать уточнения, как переменные, например есть у тебя работа с запросами на сервер, в результате тебе каждый раз возвращается например структура вида: {data, time} Здесь data может содержать разные типы данных и структуры, делаешь для нее переменную (принято называть заглавной буквой, например T (от Type)), и при использовании этого обобщенного типа, назовем его Response, ты уточняешь, что у тебя будет лежать в поле data. Например: type Response = { data: <T>, time: number; } И потом говоришь, что возвращаемое из запроса значение имеет тип: const user: Response<{username: string}> = .... Получение данных;
Кирилл, после ответа Акмаля стало чуть более понятно!) Спасибо за пример, так даже лучше
😉 выглядит страшно, если ранее не сталкивался, но штука удобная
то есть, если мы используем такую же конструкцию при запросе, который дает другие поля в респонсе их так же можно будет прописать в Response<{field: string, anotherField: number, ...}>?
Именно
самый первый в жизни тайпскриптёра обобщённый тип — это Array Array<number> Array<User> Array<string | null>
и если заглянуть внутрь деклараций массива, можно увидеть такое: type Array<T> = { … concat: (x: T | Array<T>) => Array<T> … } это значит, что ([]: Array<number>).concat(item) тут ты в .concat можешь передать только number или Array<number>, а вернётся тебе в любом случае Array<number> ([]: Array<string>).concat(item) тут ты в .concat можешь передать только string или Array<string>, а вернётся тебе в любом случае Array<string> и даже ([]: Array<Array<number>>).concat(item) тут ты в .concat можешь передать только Array<number> или Array<Array<number>>, а вернётся тебе в любом случае Array<Array<number>> и это работает для массивов с любым содержимым. потому что содержимое не важно, оно обобщено. важна внешняя структура, Array. а T — обобщённая абстрактная часть
Хмм. Только оно ж не будет "правильно" работать для глубоких вложенностй массивов. Ну т.е. если мы возьмём number[][], и на нём сделаем concat number[], то получим (number | number[])[]
Не будет, это да
Обсуждают сегодня