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

Всем привет Есть задача сформировать рекурсивный тип данных из другого типа

данных.
Формируется он по такой логике:
type SchemaResultType<S extends Schema> =
S extends ScalarSchema1 ? type1 :
S extends ScalarSchema2 ? type2 :
S extends ComplexSchema3 ? SchemaResultType<someComplexHandler3(S)> :
S extends ScalarSchema4 ? type4 :
S extends ComplexSchema5 ? SchemaResultType<someComplexHandler5(S)> :
...


При использовании в некоторых местах возникает ошибка
Type instantiation is excessively deep and possibly infinite. ts(2589)
(Насколько понимаю, в тех, где Schema заранее неизвестна, а передаётся аргументом).

Возможное решение - проверка типа на any или unknown
Например
type SchemaResultType<S extends Schema> =
S extends any ? any :
S extends ScalarSchema1 ? type1 :
...


Но именно такая проверка не работает и всегда возвращается any (unknown).
Скажите, как исправить?

4 ответов

14 просмотров

Любой тип extends any

Constantine- Автор вопроса
Евгений
Любой тип extends any

И как же сделать нормальную проверку?

> is excessively deep В этом причина. Что если хранить возвращаемый тип в самой схеме, или, чтобы не смешивать сущности, в декларации задать связь схем и возвращаемых типов? type Scalar1 = { schema: ScalarSchema1, returnType: type1 }; type Scalar2 = { schema: ScalarSchema2, returnType: type2 }; type Complex3 = { schema: ComplexSchema3, returnType: SchemaResultType<someComplexHandler3(S)> }; type Scalar4 = { schema: ScalarSchema4, returnType: type4 }; type Complex5 = { schema: ComplexSchema5, returnType: SchemaResultType<someComplexHandler5(S)> }; type SchemaResultType<S extends Schema> = S['returnType'];

Constantine- Автор вопроса
Анатолий Облаухов
> is excessively deep В этом причина. Что если хр...

Проблема уже решена Нужно просто было сделать нормальную проверку на any в SchemaResultType. Так работает правильно: type SchemaResultType<S extends Schema> = 0 extends (1 & S) ? unknown : S extends ScalarSchema1 ? type1 : ... А заранее формировать результирующие типы невозможно из-за того, что в сложных типах могут использоваться любые другие из представленных, в тч другие сложные, но какие именно мы не знаем.

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

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

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