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

А как вообще валидируют TS-код с возможными сайдэффектами? Допустим, тыкаю

я API условным await axios.get<MyReturnType>("/entity") — возвратное значение get-а будет Promise<MyReturnType> с точки зрения TS, но может быть каким угодно IRL (может, вместо сервиса висит затычка, отвечающая HTTP 200 вообще на все запросы).

29 ответов

37 просмотров
Timur-Demin Автор вопроса

В простом случае я могу скормить содержимое респонса конструктору модельки, используемой в TS-коде. А для, скажем, массивов что делать? if (typeof response.data !== "array") { throw ... }?

У меня всегда ответ от сервера — Promise<unknown> есть схема const userSchema = yup.object({ id: yup.number(), name: yup:string(), }) type User = yup.InferType<userSchema> const getUser = get('/user') .then(unknown => userSchema.validate(unknown)) При вызове getUser я получу либо статически типизированного юзера, либо ошибку валидации (которую соответствующим образом обработаю и не дам статически типизированному коду работать с непонятно чем). Кроме yup есть io-ts, runtypes и ещё какие-то решения.

Timur-Demin Автор вопроса

Годно, спасибо.

Тут на днях упоминался zod И zod прекрасен

Timur-Demin Автор вопроса

https://github.com/colinhacks/zod Этот?

Да

А он умеет в асинхронную валидацию?

Сколько же этих либ уже наделали? superstruct, runtypes, io-ts, typed contracts

Нужно больше, пока команда TS не решит, что пора вмешаться и ввести стандартные интерфейсы >:D

Timur-Demin Автор вопроса

Просто обернуть в промис недостаточно или я что-то не понимаю?

let asyncJimmySchema = yup.string().test( 'is-jimmy', '${path} is not Jimmy', async (value, testContext) => (await fetch('/is-jimmy/' + value)).responseText === 'true', }); await schema.isValid('jimmy'); // => true await schema.isValid('john'); // => false https://github.com/jquense/yup#mixedtestname-string-message-string--function-test-function-schema

Не, все эти валидаторы синхронные, для асинхронна нужно ручками писать то что ты написал.

Timur-Demin Автор вопроса

А, речь про кастомные функции валидации. Спасибо, не сразу понял.

Yup по этому и юзают в формах

Кастомные там есть. Кастомных асинхронных нет

Сейчас дочитал, что умеет промисы проверять. Проверяет, что значение - промис, потом дожидается разрешения промиса, проверяет содержимое, и возвращает промис с значением либо ошибкой валидации

Не то

Да

Как?

Если нужно сделать запрос дабы что/то провалидировать, то там refine умеет принимать асинхронные функции Если нужно делать сам парсинг асинхронно, то там есть методы parseAsync и safeParceAsync

чот не фурычит

Сверь версию с версией в документации

версию чего? я сделал npm i zod, взял latest да и нет в документации parseAsync и safeParseAsync

Дока по умолчанию идет на zod3, а он в альфе При npm i zod устанавливается zod 1

Странненько

да, с альфой работает странненько, что документация по умолчанию описывает не номерную версию

Обычно об этом дисклеймер есть

хотяяяяя…… нет, дока по умолчанию на latest версию

Не, там в ридми пишется zod 3 и потом дока Если переключить ветку на мастер, там будет дока для лэйтест

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта