169 похожих чатов

Друзья, помогите разобраться. Generic'ами в TS называют функции, где возвращаемое

значение такого же типа как и вводные параметры?(пропсы)

10 ответов

18 просмотров

Дженерики — это особые средства языка для реализации обобщённого программирования. Особого подхода позволяющего работать с различными типами данных без изменения их описания.

Что конкретно не понятно?) Это общий тип, в который можно передавать уточнения, как переменные, например есть у тебя работа с запросами на сервер, в результате тебе каждый раз возвращается например структура вида: {data, time} Здесь data может содержать разные типы данных и структуры, делаешь для нее переменную (принято называть заглавной буквой, например T (от Type)), и при использовании этого обобщенного типа, назовем его Response, ты уточняешь, что у тебя будет лежать в поле data. Например: type Response = { data: <T>, time: number; } И потом говоришь, что возвращаемое из запроса значение имеет тип: const user: Response<{username: string}> = .... Получение данных;

Gennady-Kazantsev Автор вопроса

Кирилл, после ответа Акмаля стало чуть более понятно!) Спасибо за пример, так даже лучше

😉 выглядит страшно, если ранее не сталкивался, но штука удобная

Gennady-Kazantsev Автор вопроса

то есть, если мы используем такую же конструкцию при запросе, который дает другие поля в респонсе их так же можно будет прописать в 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[])[]

Не будет, это да

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта