This repository was archived by the owner on Mar 7, 2026. It is now read-only.
Description
type OksOfT < T extends unknown [ ] > = { [ P in keyof T ] : Ok < T [ P ] > } ;
заменить на type OksOfT<T extends unknown[]> = { [P in keyof T]: T[P] extends Result<infer U> ? Ok<U> : never };
type OksOfT<T extends unknown[]> = { [P in keyof T]: T[P] extends Result<infer U> ? Ok<U> : never };
type ValuesOf<T extends unknown[]> = { [P in keyof T]: T[P] extends Ok<infer U> ? U : never };
function comb2<T1, T2>(results: [Result<T1>, Result<T2>]) {
for (const result of results) {
if (result.isErr) return result;
}
const oks = results as OksOfT<typeof results>;
const values = oks.map(x => x.value);
return ok(values as ValuesOf<typeof oks>);
}
посмотреть как типизирован Promise.all https://github.com/microsoft/TypeScript/blob/master/lib/lib.es2015.promise.d.ts
кажется рабочее Playground Link
type OksTupleOfT < T extends Result < unknown > [ ] > = { [ P in keyof T ] : T [ P ] extends Result < infer O , infer _ > ? O : never }
type ErrsUnionOfT < T extends Result < unknown > [ ] > = T extends Array < infer R > ? R extends Err < infer E > ? E : never : never
function combine < T extends Result < unknown > [ ] > ( ...results : T ) : Result < OksTupleOfT < T > , ErrsUnionOfT < T > > {
for ( const result of results ) {
if ( result . isErr ) return result as Err < ErrsUnionOfT < T > > ;
}
return ok ( ( results as Ok < unknown > [ ] ) . map ( x => x . value ) as OksTupleOfT < T > ) ;
} Reactions are currently unavailable
fatmotorbot/src/shared/utils/result.ts
Line 43 in 0a9e2c8
заменить на
type OksOfT<T extends unknown[]> = { [P in keyof T]: T[P] extends Result<infer U> ? Ok<U> : never };посмотреть как типизирован Promise.all https://github.com/microsoft/TypeScript/blob/master/lib/lib.es2015.promise.d.ts
кажется рабочее Playground Link