es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo utilizar `selectFromResult` correctamente con TS

Quiero seleccionar datos del resultado de una consulta.

function useGetItemById(id: string) {
  return api.endpoints.getItemList(undefined, {
    selectFromResult: ({ data, ...rest }) => ({
      ...rest,
      data: data?.find(item => item.id === id)
    })
  });
}

// ...
// Pero el tipo de datos es T[] en lugar de solo T
const { data } = useGetItemById('1');

¿Qué debo hacer para obtener solo T?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener solo T en lugar de T [], puede usar encadenamiento opcional para verificar si los datos no son undefined antes de acceder a ellos.

    Entonces en lugar de:

    const { data } = useGetItemById('1');
    

    Puede hacer:

    const { data } = useGetItemById('1');
    const item = data?.[0];
    

    Esto asignará el primer elemento en el array a item, que será del tipo T en lugar de T [].

    Alternativamente, puede modificar la función selectFromResult en useGetItemById para que devuelva solo el primer elemento en lugar de un array:

    function useGetItemById(id: string) {
      return api.endpoints.getItemList(undefined, {
        selectFromResult: ({ data, ...rest }) => ({
          ...rest,
          data: data?.find(item => item.id === id)
        })
      });
    }
    
    ...
    // Ahora data es solo T
    const { data } = useGetItemById('1');
    

    Esto devolverá el primer elemento en la matriz de data que coincida con el parámetro id, que también será del tipo T.

Comments are closed.