// 订阅函数类型 export type TObservableListener = (state: T) => void // 字段订阅函数类型 export type TObservableKeyListener = (values: Pick) => void // 工具类型:排除函数属性 export type TNonFunctionProperties = { [K in keyof T as T[K] extends Function ? never : K]: T[K] } // ObservableImpl 数据类型 export type TObservableState = T & { [key: string]: any } /** * ObservableImpl 接口定义 */ export interface IObservable> { /** ObservableImpl 状态对象,深层 Proxy */ readonly state: TObservableState /** * 订阅整个状态变化 * @param fn 监听函数 * @param options immediate 是否立即触发一次 * @returns 取消订阅函数 */ subscribe(fn: TObservableListener, options?: { immediate?: boolean }): () => void /** * 订阅指定字段变化 * @param keys 单个或多个字段 * @param fn 字段变化回调 * @param options immediate 是否立即触发一次 * @returns 取消订阅函数 */ subscribeKey( keys: K | K[], fn: TObservableKeyListener, options?: { immediate?: boolean } ): () => void /** * 批量更新状态 * @param values Partial */ patch(values: Partial): void /** 销毁 ObservableImpl 实例 */ dispose(): void /** * 语法糖:返回一个可解构赋值的 Proxy * 用于直接赋值触发通知 */ toRefsProxy(): { [K in keyof T]: T[K] } }