Size: a a a

2020 October 25

EO

Eugene Obrezkov in Frontend UA
const item = map.get(key)
if (typeof item === 'undefined') {
 throw new Error()
}

doSomethingWithItem(item)
источник

EO

Eugene Obrezkov in Frontend UA
Eugene Obrezkov
const item = map.get(key)
if (typeof item === 'undefined') {
 throw new Error()
}

doSomethingWithItem(item)
при evaluation тайпскрипт увидит первый type guard и поймёт что твой код дальше безопасный, т.к. ты отсеял уже пустое
источник

EO

Eugene Obrezkov in Frontend UA
Kyrylo Yakovenko • 𝟰𝟮𝟬🦄 engineer
ну как-то отстой такое писать каждый раз при работе с Map. У меня, кстати, такой проблемы не возникает, вроде. Видимо разные конфиги TS
это в strict режиме только, из коробки тайпскрипт вообще бесполезный
источник

AK

Alexander Kuzmenko in Frontend UA
Eugene Obrezkov
const item = map.get(key)
if (typeof item === 'undefined') {
 throw new Error()
}

doSomethingWithItem(item)
если вынести typeof item === 'undefined' в хелпер, то TS тоже не поймёт
источник

EO

Eugene Obrezkov in Frontend UA
Alexander Kuzmenko
если вынести typeof item === 'undefined' в хелпер, то TS тоже не поймёт
так ты не выноси
источник

EO

Eugene Obrezkov in Frontend UA
ты ж проверяешь что значение с которым ты хочешь здесь и сейчас работать существует
источник

AZ

Andrei Zhidkov in Frontend UA
Alexander Kuzmenko
если вынести typeof item === 'undefined' в хелпер, то TS тоже не поймёт
Поймет, если ты хелпер сделаешь тайпгардом
источник

AK

Alexander Kuzmenko in Frontend UA
Andrei Zhidkov
Поймет, если ты хелпер сделаешь тайпгардом
чем
источник

AZ

Andrei Zhidkov in Frontend UA
источник

AZ

Andrei Zhidkov in Frontend UA
function isFish(pet: Fish | Bird): pet is Fish {
источник

b

b.dvorianov in Frontend UA
Eugene Obrezkov
при evaluation тайпскрипт увидит первый type guard и поймёт что твой код дальше безопасный, т.к. ты отсеял уже пустое
А можна трошки детальніше про це?
источник

AZ

Andrei Zhidkov in Frontend UA
Но, если по существу, я б не заворачивал проверку на андефайнед в тайпгард — сильно много символов так не получится сэкономить в любом случае
источник

EO

Eugene Obrezkov in Frontend UA
b.dvorianov
А можна трошки детальніше про це?
map.get() вернёт тебе либо значение что ты ищешь, либо undefined value | undefined

чтобы отсеять undefined, нужно подсказать тайпскрипту что ты проверяешь и хендлишь кейс с undefined. Он увидит type guard твой, который переёдет в рантайм, значит ты уже хендлишь кейс, когда у тебя undefined будет, а значит можно после этого if-а item интерпетироваь уже просто как value
источник

EO

Eugene Obrezkov in Frontend UA
b.dvorianov
А можна трошки детальніше про це?
источник

b

b.dvorianov in Frontend UA
Дякую 🙏🏻
источник

AK

Alexander Kuzmenko in Frontend UA
Andrei Zhidkov
Поймет, если ты хелпер сделаешь тайпгардом
источник

EO

Eugene Obrezkov in Frontend UA
Обсуждать type check и видеть any это конечно сильно)
источник

AK

Alexander Kuzmenko in Frontend UA
Eugene Obrezkov
Обсуждать type check и видеть any это конечно сильно)
по-другому не сработало)
источник

EO

Eugene Obrezkov in Frontend UA
Не мучайся и сделай нормально
источник

AK

Alexander Kuzmenko in Frontend UA
😒
источник