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

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

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

10 ответов

8 просмотров

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

Что конкретно не понятно?) Это общий тип, в который можно передавать уточнения, как переменные, например есть у тебя работа с запросами на сервер, в результате тебе каждый раз возвращается например структура вида: {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[])[]

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

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

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

Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
А чем вам питонисты не угодили?😂
.
79
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
Всем привет. Поделитесь, пожалуйста, опытом. Есть форма, на которой имеется dbgrid и кнопки: добавить, редактировать, удалить. Если нет записей в dbgrid, то кнопки редактирова...
Евгений
5
type TExtensions<GExtender>=class function GetExtension<GEntityExtenderType>:GEntityExtenderType; end; function TExtensions<GExtender>.GetExtension<GEntityExtenderType...
zamtmn
8
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Всем привет, препод задал вопрос, подскажите пожалуйста, какой адрес инкапсулирует указатель?
Свинка Пеппа
8
Почему никто ещё не написал квантовую виртуальную машину на Windows?
КТ315
7
Вот смотрите у меня есть два стрима сейчас fs, cs: TStream; fs := TFileStream.Create('filename'); cs := TCompressionStream.Create(compression_level, fs); Я хочу сделать так: ...
notme
5
Карта сайта