digamos que tengo una definición de modelo como esta.
export interface Basicdata { materialnumber: number; type: string; materialclass: string; }Además, tengo una matriz con valores que coinciden exactamente con el orden del modelo de datos básicos, es decir
["10003084", "S", "CLIP"]
Estoy buscando una forma de crear el objeto a partir de estos valores en la matriz. Lo que hice fue crear un objeto vacío y asignar los valores de matriz.
const singleRow = rows[0]; const newBD: Basicdata = { materialnumber: 0, type: '', materialclass: '', } newBD.materialnumber = singleRow[0]; newBD.type = singleRow[1]; newBD.materialclass = singleRow[2];Pero seguramente hay una forma mejor y más elegante de hacerlo, ¿no? Busqué en el mapa y reduje, pero pude encontrar una manera.
Gracias.
Como han mencionado otros, use una clase para que pueda usar el operador de propagación (técnicamente, podría crear una función que devuelva un objeto que cumpla con la interfaz Basicdata , pero debe usar una clase)
class Basicdata { materialnumber: number; type: string; materialclass: string; constructor(materialnumber: string | number, type: string, materialclass: string, ...rest: any) { this.materialnumber = typeof materialnumber === "number" ? materialnumber : parseInt(materialnumber); this.type = type; this.materialclass = materialclass; } } const rows: [string, string, string][] = [ ["10003084", "S", "CLIP"], ["4324324", "B", "FOUR"], ["4444432", "C", "CORN"], ]; const singleRow = rows[0]; const newBD = new Basicdata(...singleRow) ;El problema con la siguiente solución es que se basa en que el orden de las propiedades del objeto sea coherente. ¿Es esto lo que estás buscando?
const singleRow = [1, "2", "3"]; const newBD: Basicdata = { materialnumber: 0, type: "", materialclass: "", }; Object.keys(newBD).map((key, index) => { newBD[key] = singleRow[index] });De lo contrario, podría crear una clase como han dicho otros, o puede crear una función auxiliar como esta, si le ayudara con su caso de uso.
const addProps = (arr) => { const newObj = { materialnumber: arr[0], type: arr[1], materialclass: arr[2], }; return newObj }; addProps(singleRow)