К сожалению, тема не раскрыта, простой пересказ документации. Нет ни примеров реального использования, ни узких и сложных тем по типу typeof, keyof в дженериках, условного наследования и тп. По сути мы получили "ну вот это можно использовать так: ", а зачем и почему ? зачем нужен K если можно явно указать тип number
дженерики нужны для снятия ограничения на использование типов. Из примера это очевидно - заменяем тип данных с конкретного на дженерик, и вуаля - вместо дженерика можно подставить любой тип. Если же нужно ограничить дженерик конкретным типом - числом или строкой.. или чем то еще, то дженерик экстендит тот тип данных, которым он должен быть
Спасибо! Есть вопросы: 1. В песочнице TS не работает синтаксис ES6? Ошибка при создании generic типа в виде стрелочной функции. 2. Зачем дженерик типу давать строгую типизацию для аргумента (K extends number), когда можно использовать строгую типизацию без дженерик типа в данном случае?
Евгений, спасибо за курс, но вынужден согласиться с другими комментаторами - объяснение так себе. Пришлось переключиться и поискать более конкретное и внятное объяснение. Если с английским не совсем туго, то рекомендую th-cam.com/video/nViEqpgwxHE/w-d-xo.html
супер контент, роботаю React Native Developerom, только месяц, как раз начинаем писать на TS проект, курс очень помогает , а то пишеш что-то и сидиш вроде зделаеш а до конца как роботает непонимаеш))))
6:53 не очень понял, зачем делать дженерик наследуемый от number, если нам нужен только тип number. Проще сразу написать в конструкторе public name: T, public age: number, ведь K всё равно не может быть ни чем, кроме number
Зачем нам использовать способ K extends number, если мы просто в конструкторе можем потом указать public age: number вообще не использую тип К, если он будет только числом
TypeScript придуман для экономии времени разработчика, подробных сообщениях об ошибках, контролем над приложением и тд. А это не "обход правил", а очень практичная гибкость данного инструмента, раньше тоже считал что такая себе тема этот ts, но после набитых шишек понимаю что годнота)
Вот вроде понятно все в уроках, работаю с ТС уже 4 месяца, а до сих пор тимлида пингую, трудно правильно дженерики писать.. Видимо нужны годы опыта, хз.
Не стал бы говорить о том, что стрелочные функции (arrow function expression) - это ES6 синтаксис, а обычные функции(function declaration statement) ES5. Они как бы не одно и тоже - во-первых, в стандарте ES6 присутствует и function (function declaration statement). Посему можно просто говорить о стрелочных функциях (arrow function expression) и function declaration statement + для полноты можно было добавить function definition expression. Если ничего не перепутал.
странно что так вскользь рассказали про type они же тоже могут экстендить друг друга, для них можна юзать условие или |, в отличии от интерфейса имена должны быть уникальными, в интерфейсе это не обязательно они тогда смерджаться.
Чётко и без воды всё объяснил. Лайк
Спасибо
СПАСИБО!!!! Я уж думал, что никогда не разберусь, а тут 7 минут и готово!!!!
Всегда пожалуйста
уже несколько месяцев пользуюсь ТС но только теперь до конца понял - (Generic). Спасибо за хорошее объяснение!
Спасибо за отзыв
Наконец-то хоть кто-то обьяснил что такое дженерики нормально! Спасибо!!
пожалуйста
Благодарю за объяснение))
Всегда пожалуйста
Привет, Евгений!
Однозначно лайк!
Вопрос, а почему не использовать в последнем случае просто намбер вместо K extends number ?
Тоже такой вопрос возник. Наверное просто пример неудачный
Можно реализовать функцию которая будет возводить в степень как один примитив так и массив с ними
То есть например класс который сможет производить операции как над единичным обьектом так и над массивом таких объектов, это может быть нужно и удобно
@@anton_soldatov Можно пример (скажем, в песочнице)?
потому что K это как переменная которую ты можешь подставлять, и этот вопрос отпадет если попробуешь заменить K на number
Где тут два лайка поставить) Уже пару раз пересмотрел))
👍
Моё почтение!
Благодарю
В плюсах эти дженерики называют шаблонами, классная вещь.
К сожалению, тема не раскрыта, простой пересказ документации.
Нет ни примеров реального использования, ни узких и сложных тем по типу typeof, keyof в дженериках, условного наследования и тп.
По сути мы получили "ну вот это можно использовать так: ", а зачем и почему ? зачем нужен K если можно явно указать тип number
Было бы уважительно, если бы автор ответил на этот комментарий.
дженерики нужны для снятия ограничения на использование типов. Из примера это очевидно - заменяем тип данных с конкретного на дженерик, и вуаля - вместо дженерика можно подставить любой тип. Если же нужно ограничить дженерик конкретным типом - числом или строкой.. или чем то еще, то дженерик экстендит тот тип данных, которым он должен быть
@@макскупр-ш4у а почему просто тип any не указать тогда?
Спасибо большое!
Пожалуйста 👍
Почему это объяснено лучше чем в яндекс практикум даже спустя 4 года?..
Понятия не имею)
Спасибо, очень толковое объяснение, теперь много стало понятнее.
Пожалуйста)
Оо я ждал этого урока! Спасибо!
Спасибо! Есть вопросы: 1. В песочнице TS не работает синтаксис ES6? Ошибка при создании generic типа в виде стрелочной функции. 2. Зачем дженерик типу давать строгую типизацию для аргумента (K extends number), когда можно использовать строгую типизацию без дженерик типа в данном случае?
1. Должно работать, возможно не включена какая-то настройка
2. Это было чисто для примера
@@YauhenKavalchuk Понял. Спасибо.
@@taran_dm const getter = (data:T):T=>data
Евгений, спасибо за курс, но вынужден согласиться с другими комментаторами - объяснение так себе. Пришлось переключиться и поискать более конкретное и внятное объяснение. Если с английским не совсем туго, то рекомендую th-cam.com/video/nViEqpgwxHE/w-d-xo.html
Я не часто использовал generic типы, поэтому рассказал, как сам понял. Соглашусь, что можно было подробнее, но уж как есть
супер контент, роботаю React Native Developerom, только месяц, как раз начинаем писать на TS проект, курс очень помогает , а то пишеш что-то и сидиш вроде зделаеш а до конца как роботает непонимаеш))))
👍
Парень, извини, но что у тебя с мягкими знаками в окончаниях глаголов? Я хоть и технарь, но, читаю и кровь из глаз идёт ))
@@UnrealTabby ahaha, 8class, toje idet krov:;)
Спасибо
пожалуйста
отлично спасибо ! А вы могли бы записать курс по алгоритмам например ?
В планах есть, но когда приступлю к записи пока не знаю
@@YauhenKavalchuk спасибо за ваш труд !
👍
👍
Четко и по делу. Спасибо!
Пожалуйста
6:53 не очень понял, зачем делать дженерик наследуемый от number, если нам нужен только тип number.
Проще сразу написать в конструкторе public name: T, public age: number, ведь K всё равно не может быть ни чем, кроме number
Это было нужно в качестве примера
@@YauhenKavalchuk нужны примеры из реальной практики, а не пример ради примера, где нет логики.
@@YauhenKavalchuk вы говорите как это делать, а зачем это делать люди не поймут, и будут писать лишние дженерики
Зачем нам использовать способ K extends number, если мы просто в конструкторе можем потом указать public age: number вообще не использую тип К, если он будет только числом
Это было чисто для примера
Эх, вопрос у меня только один. Зачем было придумывать TypeScript с типизацией переменных, а потом искать, как эти правила обойти: any, generics...
TypeScript придуман для экономии времени разработчика, подробных сообщениях об ошибках, контролем над приложением и тд.
А это не "обход правил", а очень практичная гибкость данного инструмента, раньше тоже считал что такая себе тема этот ts, но после набитых шишек понимаю что годнота)
Ребята, я не понял, а в чем разница между дженерик типом и типом any?
Я так же могу указать в аргументах any и аргументы будут принимать любой тип
any - это любой тип (по сути данный вариант просто убирает весь смысл типизации). Generic - это гибкий, конфигурируемый вариант типа
почему в последнем примере вместо K extends number нельзя написать просто number?
Это нужно чисто для примера
А зачем писать "K extends number" если это то же самое что и просто number? Или есть разница какая-то?
Всё верно. Это было чисто для примера
Вот вроде понятно все в уроках, работаю с ТС уже 4 месяца, а до сих пор тимлида пингую, трудно правильно дженерики писать.. Видимо нужны годы опыта, хз.
Согласен
Можно ли смешивать generic с интерфейсом/типом? Если да, то можно маленький пример?)
Если честно, не сталкивался с таким, не могу ничего сказать
generic можно задавать только классам и функциям? например для массива или объекта у меня не получилось:
const arr: = []
const obj: = {}
Там другой синтаксис, Array. В предыдущих уроках можно найти эту информацию
Не стал бы говорить о том, что стрелочные функции (arrow function expression) - это ES6 синтаксис, а обычные функции(function declaration statement) ES5. Они как бы не одно и тоже - во-первых, в стандарте ES6 присутствует и function (function declaration statement). Посему можно просто говорить о стрелочных функциях (arrow function expression) и function declaration statement + для полноты можно было добавить function definition expression. Если ничего не перепутал.
большинство людей не знает всех именований объявлений функций )
душнила
Golang: не понял
+
👍
nic nie rozumiju
🤷♂️
Абышто
🤔🤷♂️
Автор просит оставить комментарий если что то не понятно, но на вопросы комментаторов не отвечает...
Не всегда есть на это время
странно что так вскользь рассказали про type они же тоже могут экстендить друг друга, для них можна юзать условие или |, в отличии от интерфейса имена должны быть уникальными, в интерфейсе это не обязательно они тогда смерджаться.
Кратко и ясно, спасибо! Лайк
Пожалуйста)