// 定义一个接口，用于表示动态对象
interface DynamicObject {
    [key: string]: any;
    Children?: any[];
}

export class DynamicClassHelp {
    /**
     * 动态创建对象
     * 给定DataTable所有列为string类型属性，添加Children属性
     * 例如：给定DataTable有三列col1,col2,col3，那么得到的对象有四个属性，
     * 分别为col1(string),col2(string),col3(string),Children(object[])
     * @param dt 数据源
     * @returns 动态对象数组
     */
    static createDynamicPropertyObjects(dt: any[]): DynamicObject[] {
        const result: DynamicObject[] = [];

        for (const row of dt) {
            const obj: DynamicObject = {};
            for (const key in row) {
                if (row.hasOwnProperty(key)) {
                    obj[key] = String(row[key]);
                }
            }
            obj.Children = [];
            result.push(obj);
        }

        return result;
    }

    /**
     * 给对象添加子项
     * @param obj 目标对象
     * @param children 子项数组
     */
    static addChildren(obj: DynamicObject, children: any[]): void {
        obj.Children = children;
    }
}