169 похожих чатов

Всем привет! когда уместно/оправданно использование оператора as ?? насколько я понимаю

этот оператор говорит TS что программист берет на себя ответственность

28 ответов

20 просмотров

const users = [] as User[] users.push(user) // ✅ users.push(5) // 🛑

а const users: User[] = [] не тоже самое делает?

type User = { id: number; name: string } type UsersMap = { [id: number]: User } declare const users: User[] const usersMap = users .reduce((acc, user) => ({ ...acc, [user.id]: user }), {} as UserMap)

то же самое, но немного иначе. в некоторых кейсах (как в примере выше) — не то же самое

не всегда переменная объявляется

да, в этом случае, как я понимаю, без as не обойтись

zamir- Автор вопроса

ммм, вот оно как, спасибо

это мощная штука в ловких руках. и очень опасная в неумелых) если нужно помочь тайпскрипту узнать о типах там, где он не может их вычислить (как в примере выше с редьюсом), то as очень хорош. но обращаться с ним нужно аккуратно — можно не заметить и внести расхождение между статическими типами и рантаймом

Есть какие-то рекомендации по этой теме?

zamir- Автор вопроса

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

важно понимать, зачем используют и что это даёт

хз. я не могу выразить этот опыт нормальными словами. только “опираться на здравый смысл” и “следить за тем, как в системе преобразуются и используются типы”

Всё-таки тут не очень понял, как это работает. До сих пор многое в TS вызывает вопросы (да и опыта в нём почти ноль). В этой песочнице накидал два варианта: 1. Без использования reduce 2. Ваш вариант, в немного более оптимальной форме. Для обоих вариантов допустил ошибку - вместо id использую name. Кажется, что во втором случае просто as недостаточно, либо я просто не до конца понял ваш посыл.

у объектов ключи - всегда строки, может из-за этого не ругается?

fromEntries возвращает всегда объект с обычными ключами

Хз.. Я даже не знал, что вот так можно сделать User['id']

а вот второй вариант — хм

ну да, это же JS. Где нужны ключи "не строки", лучше использовать Map (для этого его и придумали)

Эм.. Может я вас не так понял, но я говорил вот об этом

Это я не так понял, значит :D

Разве мы как раз в этом случае не занимаемся обманом? Ведь ключи объекта всегда строки.

В случае с Map всё действительно отрабатывает отлично для обоих вариантов.

мэй би. не задумывался

да, но TS следит, чтобы если ключи были числами, то числами и оставались

Признаюсь, я не очень понял мысль.. В примере в обоих случаях, ключи будут строками.

А почему никто не упомянул, что в редьюс можно указать дженерик - будет тот же эффект, но без as

🤷‍♂️

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта