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

TypeScript эксперты, отзовитесь - нужна помощь. Я застрял. Следующая функция

прекрасно работает в JS:
const test = param => param === undefined ? "string" : test
test(1)()
test(1)(2)()
test(1)(2)(3)()

я ЗНАЮ, что test возвращает string ТОЛЬКО в случае, если параметр не передан
Теперь хочу СТРОГУЮ типизацию для test в TS. Я пытаюсь делать так:
type CaseWithoutParam = () => string
type CaseWithParam = (param: number) => CaseWithParam | CaseWithoutParam
const test: CaseWithParam | CaseWithoutParam

Но компилятор ругается с такими ошибками:
первая при типизации test:
Type '(param: number) => CaseWithParam | CaseWithoutParam | "string"' is not assignable to type 'CaseWithParam | CaseWithoutParam'.
Type '(param: number) => CaseWithParam | CaseWithoutParam | "string"' is not assignable to type 'CaseWithParam'.
Type 'CaseWithParam | CaseWithoutParam | "string"' is not assignable to type 'CaseWithParam | CaseWithoutParam'.
Type '"string"' is not assignable to type 'CaseWithParam | CaseWithoutParam'
вторая - при вызове test:
Cannot invoke an expression whose type lacks a call signature. Type 'string | CaseWithParam | CaseWithoutParam' has no compatible call signatures.

Теоретически, это же ведь должно быть возможно. Возможно ли это в TS? (может infer или другие фичи conditional types?)

3 ответов

16 просмотров

въёби тернар (с)

function test<T>(param: T): T extends undefined ? string : typeof test { return param === undefined ? 'string' : test; }; что-то типа такого

лучше спросить в более профильном месте: https://t.me/ts_ru тут можно только набросить: тс - костыль, нечего прикурчивать типы к динамическому языку, ты на беке, нужны типы бери какой-нибудь C#, а не страдай фигнёй.

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

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

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