5, 5]
type Result = GetSum<Foo> // Expected to be 15
type Sum<T extends unknown[]> = T extends [] ? 0 : T extends [infer Head, ...infer Tail] ? Head + Sum<Tail> : never;
Я так сделал в итоге: type TupLen<T extends number, U extends number[] = []> = T extends 0 ? [] : U['length'] extends T ? U : TupLen<T, [T, ...U]>; type Add<T extends number, U extends number> = [...TupLen<T>, ...TupLen<U>]['length'] type TupSum<T extends any[]> = T['length'] extends 0 ? 0 : T['length'] extends 1 ? Add<T[0], 0> : T['length'] extends 2 ? Add<T[0], T[1]> : T extends [infer First extends number, infer Second extends number, ...infer Rest extends number[]] ? TupSum<[Add<First, Second>, ...Rest]> : never
type Sum<T extends number, U extends number> = [...Array<T>, ...Array<U>]['length']; type TupleSum<T extends any[]> = T['length'] extends 0 ? 0 : T['length'] extends 1 ? Sum<T[0], 0> : T['length'] extends 2 ? Sum<T[0], T[1]> : T extends [infer First extends number, infer Second extends number, ...infer Rest extends number[]] ? TupleSum<[Sum<First, Second>, ...Rest]> : never;
Охуеть, ещё и считать на типах давайте будем. Скоро вообще будем программировать только типами - збс
...Array у sum теряет число в итоге тип теряется и выводится как number
Дак уже, типы это пережиток прошлого. Да, есть некое серьёзное лобби у этого пережитка, но в целом. Они существуют тупо по причине того что примитивные
Обсуждают сегодня