Size: a a a

JavaScript — русскоговорящее сообщество

2020 May 26

AK

Alex Kaz in JavaScript — русскоговорящее сообщество
Иван
я же специально написал: “сосед по парте пишет на js”. ну вот такой он молодец. или это third-party код. или это индусы-аутсорсеры
структуры с бэка — это конечно да. только как ты можешь гарантировать без проверки в рантайме, что бэк следует описанным структурам? что не раскатили новую версию бэка, забыв подсунуть схемы фронту?

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

S

Sm•ok 😈✔️ in JavaScript — русскоговорящее сообщество
О каком инпуте речь?
источник

И

Иван in JavaScript — русскоговорящее сообщество
Alex Kaz
специально для тебя
const valueAny: any = undefined;
type ObjType<T> = T extends any ? T: never;
const valueObject: ObjType<{ value: number }> = valueAny;
console.log(valueObject.value);
ты же явно своими руками скастовал к объекту
чем этот код отличается от

const valueAny: any = undefined;
const valueObject1: { value: number } = valueAny;
console.log(valueObject1.value);
источник

KS

Konstantin Sedykh in JavaScript — русскоговорящее сообщество
. .
что значит это значение перед массивом или объектом
ответ на главный вопрос жизни, вселенной и всего такого?
источник

..

. . in JavaScript — русскоговорящее сообщество
что значит это значение?
источник

И

Иван in JavaScript — русскоговорящее сообщество
Alex Kaz
ты прав! ты никогда не можешь доверять беку, но ты также не можешь тратить бесконечно свое время на проверку данных с него. если у тебя валится приложение по e2e тестам, хотя все описано верно, значит, все вопросы к бекэнду. сам через это проходил, жутко бесило, когда выдача меняется налету.
> не можешь тратить бесконечно свое время

ну я же написал, что “тут, конечно, важно вовремя остановиться в недоверии ко всем и вся”
ну
источник

И

Иван in JavaScript — русскоговорящее сообщество
Rustam Sahatov
Поэтому тупо any использую
почему ты используешь any, если знаешь, что должен использовать unknown?
источник

И

Иван in JavaScript — русскоговорящее сообщество
Rustam Sahatov
Поэтому тупо any использую
unknown — это тип такой
источник

AK

Alex Kaz in JavaScript — русскоговорящее сообщество
да, сам хотел тебе эту ссылку кинуть. я немного не соглашусь с тобой, что этот тип много от чего спасет, достаточно просто стараться не использовать any
источник

И

Иван in JavaScript — русскоговорящее сообщество
Alex Kaz
тогда я не понимаю твоего мессаджа по поводу any vs unknown
весь мой месседж хорошо в доке описан буквально одним предложением
источник

И

Иван in JavaScript — русскоговорящее сообщество
Alex Kaz
да, сам хотел тебе эту ссылку кинуть. я немного не соглашусь с тобой, что этот тип много от чего спасет, достаточно просто стараться не использовать any
достаточно просто использовать unknown вместо any

и всё
источник

AK

Alex Kaz in JavaScript — русскоговорящее сообщество
Alex Kaz
да, сам хотел тебе эту ссылку кинуть. я немного не соглашусь с тобой, что этот тип много от чего спасет, достаточно просто стараться не использовать any
потому что
const valueUnknown: unknown = undefined;
const valueAny: any = valueUnknown;
type ObjType<T> = T extends any ? T: never;
const valueObject: ObjType<{ value: number }> = valueAny;
console.log(valueObject.value);
источник

AK

Alex Kaz in JavaScript — русскоговорящее сообщество
Иван
достаточно просто использовать unknown вместо any

и всё
вот используешь ты unknown, который ты можешь присвоить только any или сделать каст. чем это лучше пользоваться any?
источник

RS

Rustam Sahatov in JavaScript — русскоговорящее сообщество
Иван
почему ты используешь any, если знаешь, что должен использовать unknown?
Потому что я не знаю что будет в key value объекта, когда я заполню его. Например изначально у меня пустой объект, а в конце может быть {lol: "kek"} или вообще {number: 1, kodery: "gei"} и так до бесконечности
источник

RS

Rustam Sahatov in JavaScript — русскоговорящее сообщество
Как мне его на типы проверять
источник

И

Иван in JavaScript — русскоговорящее сообщество
Alex Kaz
вот используешь ты unknown, который ты можешь присвоить только any или сделать каст. чем это лучше пользоваться any?
источник

KS

Konstantin Sedykh in JavaScript — русскоговорящее сообщество
Rustam Sahatov
Потому что я не знаю что будет в key value объекта, когда я заполню его. Например изначально у меня пустой объект, а в конце может быть {lol: "kek"} или вообще {number: 1, kodery: "gei"} и так до бесконечности
а этом и состоит искусство написания сложных интерфейсов.
источник

И

Иван in JavaScript — русскоговорящее сообщество
Alex Kaz
вот используешь ты unknown, который ты можешь присвоить только any или сделать каст. чем это лучше пользоваться any?
видишь, в строчке  A.map((i: any) => i * 2) нет ошибок компиляции

а в строчке U.map((i: unknown) => i * 2) есть и целых две

и поэтому либо я проверяю всё вот так

if (Array.isArray(U)) {
   U.map((i: unknown) => {
       if (typeof i === 'number' && isFinite(i)) {
           return i * 2
       }

       return 0
   })
}


чтобы точно не упало

либо пихаю грязные касты (as number[]), либо пихаю // @ts-ignore, либо использую any — все три способа выключают типизацию (чтобы не мешала)
источник

RS

Rustam Sahatov in JavaScript — русскоговорящее сообщество
Konstantin Sedykh
а этом и состоит искусство написания сложных интерфейсов.
Просвети
источник

S

Sm•ok 😈✔️ in JavaScript — русскоговорящее сообщество
Rustam Sahatov
Потому что я не знаю что будет в key value объекта, когда я заполню его. Например изначально у меня пустой объект, а в конце может быть {lol: "kek"} или вообще {number: 1, kodery: "gei"} и так до бесконечности
Хм

null | { [key]: number | string}
источник