tengo la siguiente función:
function myFunc( id: string, optionalParamOne?: number, optionalParamTwo?: string ) { console.log(optionalParamTwo); } Me gustaría llamar a esta función especificando la id como requerida y optionalParamTwo . No me importa ' optionalParamOne . No puedo cambiar esta función.
¿Cómo puedo llamar a esta función con los parámetros id y optionalParamTwo sin tener que especificar optionalParamOne ?
Yo podría hacer esto:
myFunc('abc', null, 'dog')
Pero tengo muchos parámetros opcionales en la firma de mi función y prefiero no especificar un valor para cada uno.
Debe proporcionar algún valor (incluso si no está undefined ) para cada parámetro ordenado antes de poder proporcionar un valor para un parámetro indexado más alto.
El patrón común para reducir el texto estándar cuando se invocan funciones con parámetros poco interesantes es curry :
function myFunc ( id: string, optionalParamOne?: number, optionalParamTwo?: string ) { console.log(optionalParamTwo); } // Create a parameter-expanding function: const myParams = (id: string, optionalParamTwo?: string) => [id, undefined, optionalParamTwo] as const; // ^^^^^^^^^ // Include undefined for the params you don't want to think about when calling the function myFunc(...myParams('abc', 'dog')); // logs "dog" // Or just curry it: const myFuncWithFewerParams = ( id: string, optionalParamTwo?: string, ) => myFunc(id, undefined, optionalParamTwo); myFuncWithFewerParams('abc', 'cat'); // logs "cat"Para tuplas divididas (que abordan parámetros parciales) en el sistema de tipos, consulte esta respuesta .
No es posible hacerlo sin cambiar la función. Puede escribir un contenedor alrededor de esta función con una asignación de desestructuración para lograr el resultado deseado:
function myFunc( id: string, optionalParamOne?: number, optionalParamTwo?: string ) { console.log(optionalParamTwo); } interface MyFuncParams { optionalParamOne?: number, optionalParamTwo?: string } function myFuncWrapper(id: string, { optionalParamOne, optionalParamTwo }: MyFuncParams = {}) { myFunc(id, optionalParamOne, optionalParamTwo); } myFuncWrapper('abc', { optionalParamTwo: 'dog' });