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

preview_player
Показать описание
В данном видео мы поговорим про TypeScript. Разберем, как правильно использовать такие типы как unknown, never, void, object, Object, Record и другие непонятные типы. Покажу на примерах, как они работают, какие плюсы/минусы у каждого из них, и когда использовать какой тип.

Гайд от TypeScript про ошибки при типизации:

Код из слайдов:

Таймкоды:
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 - Заключение
Рекомендации по теме
Комментарии
Автор

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

Спасибо тебе!

atlantatesla
Автор

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

promoabys
Автор

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

admenmod
Автор

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

andreytikhonov
Автор

крутые темы
очень нравится что ты уделяешь внимание таким "фундаментальным тонкостям"
в то время как все остальные просто пишут hello world

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

dwlblcu
Автор

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

daryaemelyanova
Автор

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

hpcgpxc
Автор

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

difficultdo
Автор

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

shakapaker
Автор

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

dmaskKA
Автор

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

dmytroz.
Автор

по идее еще удобнее написать

function exhaustiveCheck(x: never): never {
throw new Error("Didn't expect to get here");
}

спасибо за полезный контент)

yunglocokid
Автор

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

amangeldi
Автор

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

endlessWay
Автор

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

rustamakhmetyanov
Автор

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

alexandroppolus
Автор

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

romanryaboshtan
Автор

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

wumgcue
Автор

Аюб, спасибо за твои видео.
Подскажите пожалуйста это одно и тоже или есть различия. Тип выводит нормальный либо я плохо тестирую не понятно)))

function shuffle<T>(array: T[]): T[] {}

function shuffle<T extends unknown[]>(array: T): T {}

uktjqnq
Автор

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

CJIueHb