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