Как использовать unknown, never, void, object, Record в TypeScript

Поделиться
HTML-код
  • Опубликовано: 25 дек 2024

Комментарии • 81

  • @promoabys
    @promoabys Год назад +16

    Аюб, спасибо.
    Очень заходят твои уроки по ТS
    Практические примеры из видео просто огонь.
    Экономишь кучу времени на самостоятельное изучение !!!

  • @andreytikhonov5477
    @andreytikhonov5477 Год назад +11

    Очередной суперский контент от Аюба 😍🥰

  • @daryaemelyanova1785
    @daryaemelyanova1785 7 месяцев назад +1

    Очень полезно, много информации выдано за 18 мин. Спасибо за видео

  • @maria-kuznetsova-s
    @maria-kuznetsova-s 5 месяцев назад +1

    Всегда думала, что `{}` это просто пустой объект.
    Спасибо тебе!

  • @роматарасов-о8л
    @роматарасов-о8л Год назад +6

    крутые темы
    очень нравится что ты уделяешь внимание таким "фундаментальным тонкостям"
    в то время как все остальные просто пишут hello world
    хочется увидеть от тебя видосы посвященные сложным кейсам в типизации

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад +1

      Сложные кейсы рассмотрим обязательно после покрытия «продвинутой базы». Спасибо за фидбэк!

  • @dfkadyr
    @dfkadyr Год назад +1

    Спасибо

  • @АнатолийГорбов-о1ь

    Лучшее видео по ТС и этим типам))

  • @DenisB-d5f
    @DenisB-d5f Год назад +2

    Найс тема, дякую
    Подразобрался с типом {}, с которым под прошлым видео не мог понять в чем прикол

  • @2difficult2do
    @2difficult2do Год назад +1

    Очень очень полезные видео. Максимально по делу и полезно. Спасибо.

  • @d1mas1k2KA
    @d1mas1k2KA Год назад +3

    Очень хороший контент, продолжай в том же духе

  • @masserrackheim5358
    @masserrackheim5358 Год назад +1

    Уникальный контент!

  • @endlessWay105
    @endlessWay105 Год назад

    Спасибо за полезный пример 2 - классное объяснение про never в условных типах. Не мог нигде найти инфу.

  • @amangeldi3424
    @amangeldi3424 Год назад +2

    Видео просто класс, больше видосиков по тс пожалуйста

  • @admenmod
    @admenmod 8 месяцев назад +1

    если я не ошибаюсь в последних версиях ts уже исправили never и void
    теперь never будет выдавать ошибку в любом случае
    пример:
    `f = (arg: never) => {}`
    раньше `f() // ok`
    сейчас `f() // error`
    а также `f = (arg: void) => {}`
    раньше `f() // error нужно передать аргумент равный undefined`
    сейчас `f() // ok`
    по идее теперь void является пустым множеством, а never является недопустимым типом, как при
    `type key = string | number
    type a = key & string
    `
    ts в нутри себя это превратит в
    `string & string | string & number`
    второй юнион вернет never, логическую ошибку типа и отсечется от результата, а void который является как раз таки пустым множеством, теперь может попасть в тип как возможный тип равный пустому множеству
    если установленный для чего либо тип являет логической ошибкой (если значение юнион не определен даже как пустое множество, чего раньше добится было нельзя) то будет ошибка в любом случае, как и должно быть

  • @МаксимИсаев-ъ5о
    @МаксимИсаев-ъ5о Год назад +1

    Мое почтение!

  • @dmytroz.2084
    @dmytroz.2084 Год назад +1

    круто круто круто! то что доктор прописал!
    Спасибо Аюб!

  • @nouchance
    @nouchance Год назад +1

    Spasibo bratan

  • @shakapaker
    @shakapaker Год назад +4

    по тайпскрипту нравяться темы, очень полезно

  • @yunglocokid1457
    @yunglocokid1457 5 месяцев назад

    по идее еще удобнее написать
    function exhaustiveCheck(x: never): never {
    throw new Error("Didn't expect to get here");
    }
    спасибо за полезный контент)

    • @ayub_begimkulov
      @ayub_begimkulov  5 месяцев назад +1

      Я не фанат такого подхода, так как в рантейме ошибка может быть, если в типизации что-то не учли)

  • @from_brest2631
    @from_brest2631 Год назад

    Держи лукас, норм материальчик

  • @kirillboychenko7724
    @kirillboychenko7724 Год назад +1

    спасибо большое аюб,

  • @mercury_2379
    @mercury_2379 Год назад +1

    комментарий в поддержку канала

  • @anton7p704
    @anton7p704 Год назад +1

    спасибо

  • @smoke2638
    @smoke2638 6 месяцев назад

    спасибо!))

  • @artyomtaranenko2267
    @artyomtaranenko2267 Год назад +3

    Давай больше TS))

  • @alexandroppolus
    @alexandroppolus Год назад +1

    4:40
    Можно написать Fn extends (...args: never[]) => unknown
    Функция с такими параметрами является наиболее "общей", т.е. грубо говоря, если в параметры такой функции будут передавать только значения never, то мы можем подставить туда свою функцию, принимающую, допустим, number, который более широкий, чем never. Это явление в типизации называется "контравариантность".
    Но тут есть спорный момент: функцию (...args: never[]) => unknown можно вызвать вообще без параметров, и по идее в переменную такого типа нельзя ставить функцию с хотя бы одним обязательным параметром. Вероятно, это упрощение TS, а может, починят когда-нибудь.

    • @zohnannor
      @zohnannor 3 месяца назад

      хоть кто-то про контрвариантность упомянул!

  • @jamjam3337
    @jamjam3337 Год назад +1

    👏👍

  • @rustamakhmetyanov4404
    @rustamakhmetyanov4404 Год назад +4

    Все круто, спасибо, вижу коменты от начинающих которые просят то, что уже есть в ютубе, в слитых курсах и т.д. Слушать их или нет дело конечно твоё, но твой контент уникальный среди всего этого однообразного, думаю многие согласятся со мной, так что продолжай в том же направлении. Ещё раз спасибо. P. S. Я сам джун опыта пару месяцев =)

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад

      Спасибо за фидбэк!
      В плане контента можешь не волноваться, планирую раскрывать темы для людей, кто уже имеет хотя бы большой опыт.

  • @jqueryscripter6827
    @jqueryscripter6827 3 месяца назад

    03:12 Когда unknown не будет правильно работать?
    Вместо any можно:
    function wrap(fn: (...args: A) => R) {
    return function wrapped(...args: A) {
    return fn.apply(null, args);
    };
    }

  • @ПетрПетров-ж9е
    @ПетрПетров-ж9е Год назад +1

    Аюб, спасибо за твои видео.
    Подскажите пожалуйста это одно и тоже или есть различия. Тип выводит нормальный либо я плохо тестирую не понятно)))
    function shuffle(array: T[]): T[] {}
    function shuffle(array: T): T {}

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад

      Не, я думаю в таком случае нормально будет все. Но я бы все равно по первому написал бы лучше.

  • @omak3313
    @omak3313 Год назад +1

    Пока что не начинал изучать TS, но скоро начну. Всё из этого ролика актуально для TS 5.0, релиз которого вышел на днях?

    • @ИмяФамилия-э4ф7в
      @ИмяФамилия-э4ф7в Год назад +1

      Да, новый стандарт не отменяет старый, а расширяет его.

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад

      Да, все актуально кончено же. У TS не semver, так у них не бывает больших мажоров.

    • @xoxo2880808
      @xoxo2880808 Год назад

      @@ayub_begimkulov а по декораторам разве у них там не braking change будет?

  • @RuslanDasaev-f7f
    @RuslanDasaev-f7f Год назад +1

    8:12 а почему, если поменять стрелку на обычную функцию, то тип будет void ?

  • @CJIu3eHb
    @CJIu3eHb Год назад +1

    Получается, что в примере с FilterTest (11:20) можно использовать never в качесте Omit для union.

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад

      Да, примерно так)

    • @CJIu3eHb
      @CJIu3eHb Год назад

      @@ayub_begimkulov Хотя, конечно, в данном случае проще использовать Extract вместо трюка с never.
      Кстати, ты успел опередить Ulbi TV с выходом ролика, он тоже про exhaustiveCheck и typeguard говорил и прочее.

  • @romanryaboshtan9270
    @romanryaboshtan9270 Год назад

    cool, прокачивает навык ts, я много использовал ts, но не сильно углублялся...

  • @alexandersmirnov3161
    @alexandersmirnov3161 Год назад

    Расскажи про satisfies/infer

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад

      Да, есть в планах покрыть эту тему.

  • @СофьяИванова-д6ж

    привет, сними пожалуйста подробно про Mapped types

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад

      Да, в планах есть заснять видео на эту тему. Должно выйти скоро на канале.

  • @artyomtaranenko2267
    @artyomtaranenko2267 Год назад

    А как же arr.filter(Boolean) ?)
    Или я чего-то не понял

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад

      А можешь таймкод отправить? Не понимаю о чем ты.

    • @artyomtaranenko2267
      @artyomtaranenko2267 Год назад

      @@ayub_begimkulov 13:48. Скорее всего я не так понял

  • @zohnannor
    @zohnannor 3 месяца назад

    2:56 хватило бы сказать "контрвариантность" и все

  • @whiteguards43
    @whiteguards43 Год назад

    5я минута, что такое констрейнт?

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад

      констрейнт - ограничение. в том случае я говорил именно про ограничение дженерика. я объяснял эту тему более детально в моем видосе по дженерикам.

  • @gh8499
    @gh8499 Год назад

    Почему в первом примере нельзя написать fn: function ? И не нужно ссылаться на какую-то "странную" работу тайп скрипта, потому что ты сам указал extends.

    • @ayub_begimkulov
      @ayub_begimkulov  Год назад +1

      Если ты про 3:51, то это обучающий пример.
      Да можно так и не писать, но есть много случаев, когда тебе придется использовать дженерик и нужно знать, что для аргументов функции unknown не подойдет.
      Постараюсь в следующий раз уделить таким моментам больше внимания. Спасибо за фидбэк!

  • @dimasheiko
    @dimasheiko Год назад +1

    Лайк, если заметил смену футболки 😅

  • @sykalovandrey6090
    @sykalovandrey6090 Год назад

    Any же наследуется от unknown

  • @ИмяФамилия-э4ф7в
    @ИмяФамилия-э4ф7в Год назад +1

    Never say never 🤣