Estoy tratando de ordenar una matriz de objetos dentro de una función, sin embargo, la función recibe la clave como parámetro, por lo que es desconocida:
export interface ProductsList { id: boolean nome: string qtde: number valor: number valorTotal: number } const exampleFn = (productsData: ProductsList[], order: string) => { if (order !== 'id' && order !== 'nome') { productsData.sort((a, b) => b[order] - a[order]) } } Recibo este error con el order :
Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'ProductsList'. No index signature with a parameter of type 'string' was found on type 'ProductsList' Intenté establecer una index signature para order , pero sin éxito.
¿Qué puede ser?
Dado que restar cadenas o valores booleanos no tiene sentido, debe usar keyof y exclude :
export interface ProductsList { id: boolean nome: string qtde: number valor: number valorTotal: number } const exampleFn = (productsData: ProductsList[], order: Exclude<keyof ProductsList, 'id'| 'nome'>) => { productsData.sort((a, b) => { const c = a[order] return b[order] - a[order] }) } editar: ¡Con la verificación de clave, también puede omitir la exclude !
const exampleFn = (productsData: ProductsList[], order: keyof ProductsList) => { if (order !== 'id' && order !== 'nome') { productsData.sort((a, b) => { const c = a[order] return b[order] - a[order] }) } }