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

Приветики Пришёл с глупым вопросом.. Подскажите, есть ли возможность затипизировать функцию

с конкретным значением на выходе?

Что-нибудь типа такого:

type SomeFn = (v: string | null) => NaN | number;

Такой код, соответственно, не работает, есть ли варианты сделать то, что я хочу?)

21 ответов

8 просмотров

number уже включает в себя NaN. Это всё равно, что писать 'a' | 'b' | string

Yuri-Kostin Автор вопроса

Я понимаю. Но окей, на самом деле у меня вот такая сигнатура на выходе: Either<NaN, number>

Yuri-Kostin Автор вопроса

Точнее такую бы я хотел. Но видимо, без вариантов..

А можешь уточнить вопрос? Пример-то вроде вполне рабочий, но он что-то делает не как ожидается?

Yuri-Kostin Автор вопроса
Yuri-Kostin Автор вопроса

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

ну, об этом компилятор и говорит: type Test = typeof NaN // number Вам скорее Option нужет, а не Either

да, действительно, кажется NaN вываливается за границы типизации TS. Попробуй использовать null вместо NaN?

Yuri-Kostin Автор вопроса

Ну, кстати, учитывая, что функция у меня претерпела изменения, наверное, можно и Option использовать.. Но прикол был в том, что я хотел сделать вот так type ParseNumber = (input: string | null) => Either<null | NaN, number>;

ничто вас не спасёт от того, что NaN имеет number тип, а значит Right(NaN) вполне валидное в рантайме значение (с точки зрения ТС/джс) Со строками, кстати, тоже такое не прокатит type NotA = Exclude<string, 'a'> // string (не исключает значения 'a')

Про исключение конректных значений понятно. Жалко, что оно NaN не хочет как Union type из одного варианта понимать

Наверное, должен быть ишью. Чем НаН хуже или лучше других значений намбера?.. Может, специфика, что НаН !== НаН?

Yuri-Kostin Автор вопроса

Вот так в итоге написал const parseNumber: ParseNumber = (input) => pipe( either.fromNullable(new Error('Empty input'))(input), either.map(parseInt), either.filterOrElse( value => !isNaN(value), () => new Error('Input must be a number'), ) );

кажется в этой сигнатуре null вообще лишний

я бы примерно так сделал если очень нужно

https://habr.com/ru/post/498042/

Yuri-Kostin Автор вопроса

Ух жёсткое что-то, спасибо большое)

Yuri-Kostin Автор вопроса

О, чёт даже не искал перевод. Спасибо, прочитаю ещё раз. Статья просто огонь

просто брендирование с рантайм проверками

согласен

Yuri-Kostin Автор вопроса

Не так я пока силён в TS)

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

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

Hi there everyone Is there anyone who have not started hamster bot yet? I need only one, I'll be glad if you do this for me DM if you haven't yet
Mehrshad
41
why some site like google has separate page for username/email and password?
Mr Thieves
21
А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Всем привет. Программно добавляю документы в таблицу site_content в конце очищаю кеш $modx->clearCache(); Но документы появляются в дереве только после того как редактирую ...
Владимир
6
Подскажите, сейчас что то есть (JS модуль какой-нибудь), что можно использовать для: 1) переваривания javascript codа из html fileа, т.е. разбивки, на переменные, команды, бло...
Iar De
32
Мне интересно, скорее людей здесь используют D, Rust, C/C++ для решения реальных прикладных задач за деньги?)
Evil Satanson
43
кто поможет крякнуть чит? (реверс инжиринг) чтобы разблокировать премиум версию
Mёdkinson Medvezhkin
40
какие клиентские датасеты в лазаре умеют объединяться в master-detail? нужно забрать на клиент запись из одной таблицы и выборку из другой связанной один-ко-многим, отредактир...
Igor
19
https://t.me/hamster_kombaT_bot/start?startapp=kentId5602172918 Bermainlah denganku, jadilah CEO bursa kripto dan dapatkan airdrop token! 💸  2k Koin sebagai hadiah pertama kal...
Andrea Surya Habibie
5
Если максимально упростить, задача такая: приходит запрос на декремент енергии (removeEnergy) (он может быть больше текущего energy), необходимо отнять эту энергию у одного юз...
Mihail Verenich
3
Карта сайта