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

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

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

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

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

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

21 ответов

29 просмотров

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)

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

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

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