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

Поділитися
Вставка
  • Опубліковано 3 лип 2024
  • В данном видео мы поговорим про TypeScript. Разберем, как правильно использовать такие типы как unknown, never, void, object, Object, Record и другие непонятные типы. Покажу на примерах, как они работают, какие плюсы/минусы у каждого из них, и когда использовать какой тип.
    Гайд от TypeScript про ошибки при типизации:
    www.typescriptlang.org/docs/h...
    Код из слайдов:
    github.com/Ayub-Begimkulov/yo...
    Таймкоды:
    00:00-00:36 - Интро
    00:36-02:56 - Что такое unknown и когда его использовать?
    02:56-05:18 - Когда unknown не будет правильно работать?
    05:18-07:01 - Что такое never?
    07:01-08:24 - Когда появляется never?
    08:24-12:17 - В каких случаях может быть полезен never?
    12:17-13:25 - Что такое void?
    13:25-14:53 - Разбираем типы для встроенных конструкторов.
    14:53-18:11 - Типизация объектов.
    18:11-18:31 - Заключение

КОМЕНТАРІ • 77

  • @atlantatesla9348
    @atlantatesla9348 3 дні тому

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

  • @promoabys
    @promoabys Рік тому +15

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

  • @yunglocokid1457
    @yunglocokid1457 3 дні тому

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

  • @andreytikhonov5477
    @andreytikhonov5477 Рік тому +10

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

  • @daryaemelyanova1785
    @daryaemelyanova1785 2 місяці тому +1

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

  • @galievramil1169
    @galievramil1169 4 місяці тому

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

  • @user-dw8lb8lc7u
    @user-dw8lb8lc7u Рік тому +6

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

    • @ayub_begimkulov
      @ayub_begimkulov  Рік тому +1

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

  • @2difficult2do
    @2difficult2do Рік тому +1

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

  • @shakapaker
    @shakapaker Рік тому +4

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

  • @user-hp2cg6px8c
    @user-hp2cg6px8c Рік тому +2

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

  • @artyomtaranenko2267
    @artyomtaranenko2267 Рік тому +3

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

  • @user-mu4my8fq2e
    @user-mu4my8fq2e 10 місяців тому +1

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

  • @d1mas1k2KA
    @d1mas1k2KA Рік тому +3

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

  • @dmytroz.2084
    @dmytroz.2084 Рік тому +1

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

  • @admenmod
    @admenmod 3 місяці тому +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 который является как раз таки пустым множеством, теперь может попасть в тип как возможный тип равный пустому множеству
    если установленный для чего либо тип являет логической ошибкой (если значение юнион не определен даже как пустое множество, чего раньше добится было нельзя) то будет ошибка в любом случае, как и должно быть

  • @nouchance
    @nouchance Рік тому +1

    Spasibo bratan

  • @amangeldi3424
    @amangeldi3424 Рік тому +2

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

  • @kirillboychenko7724
    @kirillboychenko7724 Рік тому +1

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

  • @smoke2638
    @smoke2638 16 днів тому

    спасибо!))

  • @user-vm2db5cq1g
    @user-vm2db5cq1g Рік тому +1

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

  • @endlessWay105
    @endlessWay105 Рік тому

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

  • @from_brest2631
    @from_brest2631 Рік тому

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

  • @mercury_2379
    @mercury_2379 Рік тому +1

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

  • @dfkadyr
    @dfkadyr Рік тому +1

    Спасибо

  • @anton7p704
    @anton7p704 Рік тому +1

    спасибо

  • @jamjam3337
    @jamjam3337 Рік тому +1

    👏👍

  • @rustamakhmetyanov4404
    @rustamakhmetyanov4404 Рік тому +4

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

    • @ayub_begimkulov
      @ayub_begimkulov  Рік тому

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

  • @romanryaboshtan9270
    @romanryaboshtan9270 8 місяців тому

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

  • @alexandroppolus
    @alexandroppolus Рік тому

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

  • @user-wu7mg1cu4e
    @user-wu7mg1cu4e Рік тому

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

    • @ayub_begimkulov
      @ayub_begimkulov  Рік тому

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

  • @alexandersmirnov3161
    @alexandersmirnov3161 Рік тому

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

    • @ayub_begimkulov
      @ayub_begimkulov  Рік тому

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

  • @user-uk5tj3qn5q
    @user-uk5tj3qn5q Рік тому +1

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

    • @ayub_begimkulov
      @ayub_begimkulov  Рік тому

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

  • @user-qg8mw4jx7s
    @user-qg8mw4jx7s Рік тому +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 говорил и прочее.

  • @omak3313
    @omak3313 Рік тому +1

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

    • @user-vu6hn4ul2i
      @user-vu6hn4ul2i Рік тому +1

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

    • @ayub_begimkulov
      @ayub_begimkulov  Рік тому

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

    • @xoxo2880808
      @xoxo2880808 Рік тому

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

  • @dimasheiko
    @dimasheiko Рік тому +1

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

  • @artyomtaranenko2267
    @artyomtaranenko2267 Рік тому

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

    • @ayub_begimkulov
      @ayub_begimkulov  Рік тому

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

    • @artyomtaranenko2267
      @artyomtaranenko2267 Рік тому

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

  • @whiteguards43
    @whiteguards43 Рік тому

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

    • @ayub_begimkulov
      @ayub_begimkulov  Рік тому

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

  • @sykalovandrey6090
    @sykalovandrey6090 Рік тому

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

  • @gh8499
    @gh8499 Рік тому

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

    • @ayub_begimkulov
      @ayub_begimkulov  Рік тому +1

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

  • @user-vu6hn4ul2i
    @user-vu6hn4ul2i Рік тому +1

    Never say never 🤣

  • @masserrackheim5358
    @masserrackheim5358 Рік тому +1

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