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

แชร์
ฝัง
  • เผยแพร่เมื่อ 30 ก.ย. 2024

ความคิดเห็น • 82

  • @promoabys
    @promoabys ปีที่แล้ว +15

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

    • @ayub_begimkulov
      @ayub_begimkulov  ปีที่แล้ว +2

      Рад, что понравилось!

  • @andreytikhonov5477
    @andreytikhonov5477 ปีที่แล้ว +10

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

  • @admenmod
    @admenmod 6 หลายเดือนก่อน +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 который является как раз таки пустым множеством, теперь может попасть в тип как возможный тип равный пустому множеству
    если установленный для чего либо тип являет логической ошибкой (если значение юнион не определен даже как пустое множество, чего раньше добится было нельзя) то будет ошибка в любом случае, как и должно быть

  • @jqueryscripter6827
    @jqueryscripter6827 15 วันที่ผ่านมา

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

  • @роматарасов-о8л
    @роматарасов-о8л ปีที่แล้ว +6

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

    • @ayub_begimkulov
      @ayub_begimkulov  ปีที่แล้ว +1

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

  • @ПетрПетров-ж9е
    @ПетрПетров-ж9е ปีที่แล้ว +1

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

    • @ayub_begimkulov
      @ayub_begimkulov  ปีที่แล้ว

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

  • @shakapaker
    @shakapaker ปีที่แล้ว +4

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

    • @ayub_begimkulov
      @ayub_begimkulov  ปีที่แล้ว

      Рад, что было полезно.

  • @artyomtaranenko2267
    @artyomtaranenko2267 ปีที่แล้ว +3

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

  • @romanryaboshtan9270
    @romanryaboshtan9270 11 หลายเดือนก่อน

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

  • @d1mas1k2KA
    @d1mas1k2KA ปีที่แล้ว +3

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

  • @DenisB-d5f
    @DenisB-d5f ปีที่แล้ว +2

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

  • @zohnannor
    @zohnannor 16 วันที่ผ่านมา

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

  • @daryaemelyanova1785
    @daryaemelyanova1785 5 หลายเดือนก่อน +1

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

  • @amangeldi3424
    @amangeldi3424 ปีที่แล้ว +2

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

  • @dimasheiko
    @dimasheiko ปีที่แล้ว +1

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

    • @ayub_begimkulov
      @ayub_begimkulov  ปีที่แล้ว +1

      Снимал в разные дни)

  • @yunglocokid1457
    @yunglocokid1457 3 หลายเดือนก่อน

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

    • @ayub_begimkulov
      @ayub_begimkulov  2 หลายเดือนก่อน +1

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

  • @nouchance
    @nouchance ปีที่แล้ว +1

    Spasibo bratan

  • @2difficult2do
    @2difficult2do ปีที่แล้ว +1

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

  • @mercury_2379
    @mercury_2379 ปีที่แล้ว +1

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

  • @ИмяФамилия-э4ф7в
    @ИмяФамилия-э4ф7в ปีที่แล้ว +1

    Never say never 🤣

  • @anton7p704
    @anton7p704 ปีที่แล้ว +1

    спасибо

  • @smoke2638
    @smoke2638 3 หลายเดือนก่อน

    спасибо!))

  • @jamjam3337
    @jamjam3337 ปีที่แล้ว +1

    👏👍

  • @alexandroppolus
    @alexandroppolus ปีที่แล้ว +1

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

    • @zohnannor
      @zohnannor 16 วันที่ผ่านมา

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

  • @RuslanDasaev-f7f
    @RuslanDasaev-f7f ปีที่แล้ว +1

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

    • @ayub_begimkulov
      @ayub_begimkulov  ปีที่แล้ว +1

      Видимо какой-то баг TS)

  • @atlantatesla9348
    @atlantatesla9348 3 หลายเดือนก่อน +1

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

  • @omak3313
    @omak3313 ปีที่แล้ว +1

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

    • @ИмяФамилия-э4ф7в
      @ИмяФамилия-э4ф7в ปีที่แล้ว +1

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

    • @ayub_begimkulov
      @ayub_begimkulov  ปีที่แล้ว

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

    • @xoxo2880808
      @xoxo2880808 ปีที่แล้ว

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

  • @CJIu3eHb
    @CJIu3eHb ปีที่แล้ว +1

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

    • @ayub_begimkulov
      @ayub_begimkulov  ปีที่แล้ว

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

    • @CJIu3eHb
      @CJIu3eHb ปีที่แล้ว

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

  • @kirillboychenko7724
    @kirillboychenko7724 ปีที่แล้ว +1

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

  • @МаксимИсаев-ъ5о
    @МаксимИсаев-ъ5о ปีที่แล้ว +1

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

  • @sykalovandrey6090
    @sykalovandrey6090 ปีที่แล้ว

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

    • @ayub_begimkulov
      @ayub_begimkulov  ปีที่แล้ว

      первый раз такое слышу))

  • @from_brest2631
    @from_brest2631 ปีที่แล้ว

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

  • @dmytroz.2084
    @dmytroz.2084 ปีที่แล้ว +1

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

  • @whiteguards43
    @whiteguards43 ปีที่แล้ว

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

    • @ayub_begimkulov
      @ayub_begimkulov  ปีที่แล้ว

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

  • @АнатолийГорбов-о1ь
    @АнатолийГорбов-о1ь ปีที่แล้ว +1

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

  • @rustamakhmetyanov4404
    @rustamakhmetyanov4404 ปีที่แล้ว +4

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

    • @ayub_begimkulov
      @ayub_begimkulov  ปีที่แล้ว

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

  • @galievramil1169
    @galievramil1169 7 หลายเดือนก่อน

    Отличное видео, автор джедай!

  • @dfkadyr
    @dfkadyr ปีที่แล้ว +1

    Спасибо

  • @СофьяИванова-д6ж
    @СофьяИванова-д6ж ปีที่แล้ว

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

    • @ayub_begimkulov
      @ayub_begimkulov  ปีที่แล้ว

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

  • @endlessWay105
    @endlessWay105 ปีที่แล้ว

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

  • @gh8499
    @gh8499 ปีที่แล้ว

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

    • @ayub_begimkulov
      @ayub_begimkulov  ปีที่แล้ว +1

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

  • @alexandersmirnov3161
    @alexandersmirnov3161 ปีที่แล้ว

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

    • @ayub_begimkulov
      @ayub_begimkulov  ปีที่แล้ว

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

  • @artyomtaranenko2267
    @artyomtaranenko2267 ปีที่แล้ว

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

    • @ayub_begimkulov
      @ayub_begimkulov  ปีที่แล้ว

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

    • @artyomtaranenko2267
      @artyomtaranenko2267 ปีที่แล้ว

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

  • @masserrackheim5358
    @masserrackheim5358 ปีที่แล้ว +1

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