Учитывая этот интерфейс:
interface Data {
name: string;
route0?: string;
route1?: string;
route2?: string;
route3?: string;
route4?: string;
route5?: string;
route6?: string;
route7?: string;
route8?: string;
route9?: string;
}
Я хочу иметь возможность динамически создавать объекты этого типа из набора входных данных. Это была моя попытка:
interface Route {
ordinal: number;
value: string;
}
const createData = (name: string, routes: Route[]): Data => {
const data: Data = { name };
routes.forEach(route => {
// tslint:disable-next-line: no-any
(data as any)[`route${route.ordinal}`] = route.value;
});
return data;
};
console.log(createData('dummy', [{ ordinal: 2, value: 'two' }, { ordinal: 7, value: 'seven' }]));
, которая производит такой вывод:
{ name: 'dummy', route2: 'two', route7: 'seven' }
Что мне не нравится в моем решении, так это то, что мне пришлось разыграть data на любой и затем скажите tslint игнорировать этот каст.
Есть ли лучший способ сделать это?