Считаю, самым лучшим лектором именно Вас Антон так как в инэте очень много не нужной воды. У вас все по существу без лишних движений . Купил все ваши курсы и не жалею , очень абгрейдился...
Антон, а можно разбор более интересного кейса, в котором параметры первого уровня вложенности могут быть опциональными? К примеру пункт на уровне design это Record, или может быть просто опциональным. Чуть позже могу сделать пример в какой нибудь песочнице
@@PurpleSchool я имел в виду что то примерно вот такое www.typescriptlang.org/play?#code/KYOwrgtgBA0sCeBnAouaBvAUFHUBiA8gVALxQBEAZgPbXkA02uAQgIIBKpFARgIYBO5TAF9MmAJYgALsH6VeAY2BQC3AFbAFUqFlxQp8AA7AAXFERT+kgOaM9AbThJUkAHSECAXQD8ZvLSYcRwQUNFc2dh8zZgERMUkZOUVlAEkAZSleGR1AqEczNG5ZTzNVDS04iWlZeSV8Why9CGp+YAAVAAtQAsgi-lyAG2BERE7uqELZXOAARzBeAcQeiD64hJrkqBj+RtwIXkQAazMLKxBrXNbrYAAPE8sbabmFpfMH88qFahALN6zTKDpTLZMi6XAARjMYL0OAMxjM5BkNykDFyeho1ChaJhOFm80WZnBdhxMOarTGIDMACZiSTcEMRhSzAAGbE4UR6USiTBfH7aa5SAAiwGAhgACvxqMZ+AZSLkADxpKC3GQgAAmiEBGX+tJhADllcjQBqJr1ZLq9GLwYbVSanKFIBbcGKqTbjZrDghqJQoHrvnqwAMBrxuEN5WVNFIAHz2K2eKNsqAACgs-zMaXoUHEarMesznvgkKgVvzCCpZhdAEpSupI7HwZ5Y1TPKQo7sca0pGB+CA-jJ7NmfK57AWG95hwXm7lubzfohqBBlGQBcLRRKpbIDCngcBM0TYCEXBB3ERM+Q8S9yJWxEA
Спасибо. Я даже не знал, что TypeScript научился сам вычислять значение дженериков. Интересно только, почему вот та такой код он ругается, хотя по сути, всё тоже самое: ``` function get(v: T, l1: L1, l2: L2) { return v[l1][l2]; } const obj = {a: {d: 2}, b: {c: 1}} // Ошибка на значении 'c': // Argument of type 'string' is not assignable to parameter of type 'never'.(2345) get(obj, 'b', 'c') ```
Антон, спасибо за отличный урок!!! У меня такой вопрос если можно: а как мне правильно типы ключей записать если я хочу по ключам получить значение из подобного объекта, но не хочу функцию использовать? пример моей типизации ключа: дан объект const radioBtnValue = { usually: ["avgmin", "avgmax"], records: ["extmin", "extmax"], } нужно получить из него значение const min = radioBtnValue[radio as keyof typeof radioBtnValue] можно без as в данном случае обойтись? У меня на работе я постоянно с подобным сталкиваюсь и хочу от as уйти, но не могу кейс с решением найти(((
Для тех, кто хочет больше разобраться в TypeScript я подготовил полный курс: purpleschool.ru/course/typescript
Failed to load resource: the server responded with a status of 429 ()
Считаю, самым лучшим лектором именно Вас Антон так как в инэте очень много не нужной воды.
У вас все по существу без лишних движений . Купил все ваши курсы и не жалею , очень абгрейдился...
Спасибо большое! Рад, что мои курсы приносят пользу)
Выглядит на первый взгляд сложно, но объяснили отлично и все теперь выглядеть стало просто и логично👍
@@suslikest3708 👍
Вот это магия. Круть!
👍
Спасибо, это самое понятное объяснение!
Пожалуйста 👍
Отличное объяснение. Спасибо.
Спасибо!)
кайф, очень нравятся твои объяснения
Спасибо!)
Очень полезно, как раз искал подобное!
Супер)
ОФигенно подан контент!! Лайк!
Спасибо)
Большое тебе человеческое спасибо!
Пожалуйста)
толковый пример для дженерика
👍
Офигенно!
Спасибо!
Это было так хорошо, что я расплакался
😂
Очень красиво и доходчиво. Спасибо! Подписался
Спасибо!
Классно объясняешь ) хапанул пару курсов )
Супер) Напиши потом в чате как впечатления)
Нравятся видео про ts
Спасибо!
Очень крутое объяснение
Спасибо!
Видео топ, спасибо
Спасибо!
Спасибо!
на ютубе очень не хватает контента для не новичков, спасибо!)
Спасибо!
только эта инфа для новичков..
Антон, а можно разбор более интересного кейса, в котором параметры первого уровня вложенности могут быть опциональными? К примеру пункт на уровне design это Record, или может быть просто опциональным. Чуть позже могу сделать пример в какой нибудь песочнице
Можно так:
function getMenu(
obj: T,
l1: L1,
l2?: L2,
) {
if(!l2) {
return obj[l1];
}
return obj[l1][l2];
}
@@PurpleSchool я имел в виду что то примерно вот такое www.typescriptlang.org/play?#code/KYOwrgtgBA0sCeBnAouaBvAUFHUBiA8gVALxQBEAZgPbXkA02uAQgIIBKpFARgIYBO5TAF9MmAJYgALsH6VeAY2BQC3AFbAFUqFlxQp8AA7AAXFERT+kgOaM9AbThJUkAHSECAXQD8ZvLSYcRwQUNFc2dh8zZgERMUkZOUVlAEkAZSleGR1AqEczNG5ZTzNVDS04iWlZeSV8Why9CGp+YAAVAAtQAsgi-lyAG2BERE7uqELZXOAARzBeAcQeiD64hJrkqBj+RtwIXkQAazMLKxBrXNbrYAAPE8sbabmFpfMH88qFahALN6zTKDpTLZMi6XAARjMYL0OAMxjM5BkNykDFyeho1ChaJhOFm80WZnBdhxMOarTGIDMACZiSTcEMRhSzAAGbE4UR6USiTBfH7aa5SAAiwGAhgACvxqMZ+AZSLkADxpKC3GQgAAmiEBGX+tJhADllcjQBqJr1ZLq9GLwYbVSanKFIBbcGKqTbjZrDghqJQoHrvnqwAMBrxuEN5WVNFIAHz2K2eKNsqAACgs-zMaXoUHEarMesznvgkKgVvzCCpZhdAEpSupI7HwZ5Y1TPKQo7sca0pGB+CA-jJ7NmfK57AWG95hwXm7lubzfohqBBlGQBcLRRKpbIDCngcBM0TYCEXBB3ERM+Q8S9yJWxEA
Спасибо. Я даже не знал, что TypeScript научился сам вычислять значение дженериков.
Интересно только, почему вот та такой код он ругается, хотя по сути, всё тоже самое:
```
function get(v: T, l1: L1, l2: L2) {
return v[l1][l2];
}
const obj = {a: {d: 2}, b: {c: 1}}
// Ошибка на значении 'c':
// Argument of type 'string' is not assignable to parameter of type 'never'.(2345)
get(obj, 'b', 'c')
```
Если вы используете знак равно в дженерике, то и не забывайте добавить вопросительный знак к параметрам с соответствующими типами
Антон, спасибо за отличный урок!!! У меня такой вопрос если можно: а как мне правильно типы ключей записать если я хочу по ключам получить значение из подобного объекта, но не хочу функцию использовать?
пример моей типизации ключа:
дан объект const radioBtnValue = {
usually: ["avgmin", "avgmax"],
records: ["extmin", "extmax"],
}
нужно получить из него значение const min = radioBtnValue[radio as keyof typeof radioBtnValue]
можно без as в данном случае обойтись? У меня на работе я постоянно с подобным сталкиваюсь и хочу от as уйти, но не могу кейс с решением найти(((
А почему не срабатывает L2 extends keyof L1? Ведь тип L1 уже понятен
Блин я все понимаю но 4 строчка кода выгляди дико. Просто жесть.
Хорош 👍
Спасибо!