necesito este tipo
type Sample = [a: string, b: number]ser convertido a
type Sample2 = { a:string, b:number}Necesito esto para pasar argumentos de una función en un parámetro, en forma de objeto
function example(otherFunctionParameters: Parameters<typeof otherFunction>){}No quiero pasar una matriz en el parámetro.
Cómo puedo conseguir esto ?
Debido a que no puede manipular etiquetas de tupla en el sistema de tipos , lo mejor que puede hacer es proporcionar manualmente una tupla de claves de propiedad, una para cada parámetro en la función original.
Al adaptar algunas utilidades de esta respuesta de jcalz, aquí hay una utilidad genérica que le dará un objeto asignado para los parámetros en una función: proporciona el tipo de función y una tupla de etiquetas para cada parámetro:
type ZipTuples<Keys extends readonly any[], Values extends readonly any[]> = { [K in keyof Keys]: [Keys[K], K extends keyof Values ? Values[K] : never]; }; type ZipTuplesAsObject< Keys extends readonly PropertyKey[], Values extends readonly any[], > = { [T in ZipTuples<Keys, Values>[number] as T[0]]: T[1] }; type ParamsAsObject< Fn extends (...params: readonly any[]) => any, Keys extends readonly PropertyKey[], > = ZipTuplesAsObject<Keys, Parameters<Fn>>; // Use declare function otherFunction ( irrelevantLabel: string, alsoNotUsed: number, onlyTheTypesMatter: boolean, ): void; function example (objectParam: ParamsAsObject<typeof otherFunction, ['a', 'b', 'c']>) { // objectParam; // { a: string; b: number; c: boolean; } const {a, b, c} = objectParam; a; // string b; // number c; // boolean }Desafortunadamente, debe pasarse como una matriz porque un objeto es de un tipo diferente a una matriz.
type Sample = [a: string, b: number] type Sample2 = { a:string, b:number} function example(otherFunctionParameters: Sample){} function example2(otherFunctionParameters: Sample2){} example(['b', 3]) example2({a: 'b', b: 2})Recomiendo cambiar el tipo de firma de la función de llamada. Si esto no es posible, una matriz debería funcionar bien.