export function bindMethods(instance: T): void { const prototype = Object.getPrototypeOf(instance); const propertyNames = Object.getOwnPropertyNames(prototype); propertyNames.forEach((propertyName) => { const descriptor = Object.getOwnPropertyDescriptor(prototype, propertyName); const propertyValue = instance[propertyName as keyof T]; if ( typeof propertyValue === 'function' && propertyName !== 'constructor' && descriptor && !descriptor.get && !descriptor.set ) { instance[propertyName as keyof T] = propertyValue.bind(instance); } }); } /** * 获取嵌套对象的字段值 * @param obj - 要查找的对象 * @param path - 用于查找字段的路径,使用小数点分隔 * @returns 字段值,或者未找到时返回 undefined */ export function getNestedValue(obj: T, path: string): any { if (typeof path !== 'string' || path.length === 0) { throw new Error('Path must be a non-empty string'); } // 把路径字符串按 "." 分割成数组 const keys = path.split('.') as (number | string)[]; let current: any = obj; for (const key of keys) { if (current === null || current === undefined) { return undefined; } current = current[key as keyof typeof current]; } return current; }