He definido este objeto en el archivo TypeScript y he usado el siguiente método reduce() y no hay ningún problema con él.
sampleList = { totalRecordsTest: {}, sampleList: [ { parent: 'Sample Text 2', children: [ { id: 1, text: "Sample Text 1" }, ], }, { parent: 'Sample Text 2', children: [ { id: 2, text: "Sample Text 2" }, ], }, { parent: 'Sample Text 3', children: [ { id: 3, text: "Sample Text 3" }, ], }, ] } let grouped = this.sampleList.sampleList.reduce((groups, current) => { groups[current.parent] = groups[current.parent] || []; groups[current.parent].push(...current.children); return groups; }, Object.create(null)); this.groupedSampleList = Object.keys(grouped).map((key) => ({ parent: key, children: grouped[key], }));Sin embargo, cuando traté de crear un archivo de interfaz de modelo para "sampleList" en otro archivo, aparece el error El tipo 'indefinido' no se puede usar como un tipo de índice en el siguiente método para la variable actual .
Archivo mecanografiado
let grouped2 = this.sampleList.reduce((groups, current) => { groups[current.parent] = groups[current.parent] || []; groups[current.parent].push(...current.children); return groups; }, Object.create(null));Importar modelo en TypeScript
sampleList: SampleList[] = []Archivo modelo
export interface SampleListModel { parent?: string | '-', children?: ChildrenSampleModel[]; } export class SampleList implements SampleListModel { constructor( public parent?: string | '-', public children?: ChildrenSampleModel[] ) { } } export interface ChildrenSampleModel { id?: number, text?: string } export class ChildrenSample implements ChildrenSampleModel { constructor( public id?: number, public text?: string ) { } }Solución
El parent se declara como opcional, por lo que puede no estar definido y cuando lo uso como índice arrojará el error "El tipo 'indefinido' no se puede usar como un tipo de índice en el siguiente método para la variable actual".
export interface SampleListModel { parent: string, children: ChildrenSampleModel[]; } export class SampleList implements SampleListModel { constructor( public parent: string, public children: ChildrenSampleModel[] ) { } }Puede deberse a que parent es opcional en el constructor de SampleList , por lo que puede no estar definido y no puede usarlo como índice.