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

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

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

28 ответов

7 просмотров

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

🤷‍♂️

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

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

Вопрос по диагностике ошибок (я знаю в чем, в данном конкретном примере, я знаю, как исправить, пример модельный, понятно, что в реальности бывает намного запутаннее). module...
ⰄⰎⰋⰐⰐⰑⰛⰤⰧⰧⰩⰄ ⰊⰑⰁⰓⰡⰛⰦⰕⰫ
10
А чем вам питонисты не угодили?😂
.
79
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
Есть предложения, как подобное можно упростить?
Hemul GM
12
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
У меня вопросик назрел. Почему, создав класс без наследования и реализации деструктора Destroy, деструктор не вызывался при free. Потом указал наследование от tobject и overri...
Сергей Бычков
9
@y0zhig @shizzard А можно я опишу цель и может вообще ерланг мне не подходит. На текущий момент как я понимаю у ерланга есть легковесные потоки и задача выполняется в каком т...
Дмитрий Спиридонов
5
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
just use free version ?? pycharm has a free version
Fan / Ac
9
Карта сайта