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 ответов

3 просмотра

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

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

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

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

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

Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
А почему в си некоторые вещи работают с двойными кавычками некоторые с одинарными? Нельзя было все сделать с одними или чтоб работало с разными? например чтоб выводить строки ...
.
15
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
7
Всем привет! procedure TForm1.FormCreate(Sender: TObject); type TStartEnd = record S: Byte; E: Byte; end; var a, b: TStartEnd; begin {1} a.S := 1; {2} a.E := 2; ...
Руслан Михайлович
10
Всем привет!) я тут новенький и пытаюсь освоить evolution методом тыка. У меня при переходе между папками файлов выскакивают вот такие уведомления Можете подсказать как их от...
Диман Samoed
10
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Какого хера? /Sources/App/Modules/User/Models/UserLinkApple.swift:21:20: warning: stored property '_id' of 'Sendable'-conforming class 'UserLinkApple' is mutable @ID(...
Alexander Sherbakov
14
Привет всем. Подскажите где можно посмотреть, какая версия электрон, поддерживает версии windows? Некий changelog. Мне бы желательно, поддержку 7,8,10... latest, как понимаю и...
Anonym Squad
21
Карта сайта