;
+
+/**
+ * 接受一个对象(默认是字符串)或者零个对象作为参数的回调函数,可以是同步函数也可以是异步函数。
+ */
+export type MaybeObjectCallback = ObjectCallback
;
+
+/**
+ * 接受一个对象(默认是字符串)或者零个对象作为参数的回调函数,仅可以是同步函数。
+ */
+export type SyncMaybeObjectCallback
= SyncObjectCallback
;
+
+/**
+ * 接受一个对象(默认是字符串)或者零个对象作为参数的回调函数,仅可以是异步函数。
+ */
+export type AsyncMaybeObjectCallback
= AsyncObjectCallback
;
+
+/**
+ * 接受一个对象数组(默认是字符串数组)作为参数的回调函数,可以是同步函数也可以是异步函数。
+ */
+export type ObjectsCallback
= ObjectCallback
;
+
+/**
+ * 接受一个对象数组(默认是字符串数组)作为参数的回调函数,仅可以是同步函数。
+ */
+export type SyncObjectsCallback
= SyncObjectCallback
;
+
+/**
+ * 接受一个对象数组(默认是字符串数组)作为参数的回调函数,仅可以是异步函数。
+ */
+export type AsyncObjectsCallback
= AsyncObjectCallback
;
+
+/**
+ * 接收一个对象数组(默认是字符串数组)或者零个对象作为参数的回调函数,可以是同步函数也可以是异步函数。
+ */
+export type MaybeObjectsCallback
= ObjectCallback
;
+
+/**
+ * 接收一个对象数组(默认是字符串数组)或者零个对象作为参数的回调函数,仅可以是同步函数。
+ */
+export type SyncMaybeObjectsCallback
= SyncObjectCallback
;
+
+/**
+ * 接收一个对象数组(默认是字符串数组)或者零个对象作为参数的回调函数,仅可以是异步函数。
+ */
+export type AsyncMaybeObjectsCallback
= AsyncObjectCallback<
+ P[] | undefined,
+ T
+>;
+
+/**
+ * 可以接受任意数量任意参数类型的回调函数。
+ */
+export type ExtendParamCallback
= (...args: P[]) => T | Promise;
+
+/**
+ * 可以接受任意数量任意参数类型的仅支持同步的回调函数。
+ */
+export type SyncExtendParamCallback = (...args: P[]) => T;
+
+/**
+ * 可以接受任意数量任意参数类型的仅支持异步的回调函数。
+ */
+export type AsyncExtendParamCallback
= (...args: P[]) => Promise;
+
+/**
+ * 不接受任何参数内容的回调函数,可以是同步函数也可以是异步函数。
+ */
+export type Callback = () => T | Promise;
+
+/**
+ * 不接受任何参数内容的回调函数,仅可以是同步函数。
+ */
+export type SyncCallback = () => T;
+
+/**
+ * 不接受任何参数内容的回调函数,仅可以是异步函数。
+ */
+export type AsyncCallback = () => Promise;
+
+/**
+ * 用于在Store中定义状态操作Action的无参同步Action类型。
+ */
+export type SyncAction = SyncCallback;
+
+/**
+ * 用于在Store中定义状态操作Action的无参可异步Action类型。
+ */
+export type AsyncAction = Callback;
+
+/**
+ * 用于在Store中定义状态操作Action的单一参数同步Action类型。
+ */
+export type SyncParamAction = SyncObjectCallback;
+
+/**
+ * 用于在Store中定义状态操作Action的单一参数异步Action类型。
+ */
+export type AsyncParamAction = AsyncObjectCallback;
+
+/**
+ * 用于在Store中定义状态操作Action的不定参同步Action类型。
+ */
+export type SyncMaybeAction = SyncMaybeObjectCallback;
+
+/**
+ * 用于在Store中定义状态操作Action的不定参可异步Action类型。
+ */
+export type AsyncMaybeAction = AsyncMaybeObjectCallback;
+
+/**
+ * 用于在Store中定义状态操作Action的展开参同步Action类型。
+ */
+export type SyncExtendParamAction = SyncExtendParamCallback;
+
+/**
+ * 用于在Store中定义状态操作Action的展开参可异步Action类型。
+ */
+export type AsyncExtendParamAction = AsyncExtendParamCallback;
+
+/**
+ * 用于定义可以接受重置事件的Ref组件。
+ */
+export interface Resetable {
+ /**
+ * 组件可以接受的重置方法。
+ */
+ reset: Callback;
+}
+
+/**
+ * 用于定义可执行打开动作的Ref组件。
+ */
+export interface Openable {
+ /**
+ * 组件可以接受的打开方法。
+ */
+ open: Callback;
+}
+
+/**
+ * 用于定义可执行关闭动作的Ref组件。
+ */
+export interface Closeable {
+ /**
+ * 组件可以接受的关闭方法。
+ */
+ close: Callback;
+}
+
+/**
+ * 用于定义可以执行特定动作的Ref组件。
+ * 组件所执行的动作可以接受任意数量的参数,但不会返回任何结果。
+ */
+export interface Actionable {
+ /**
+ * 组件可以接受的执行特定动作的方法。
+ */
+ action?: ExtendParamCallback;
+}
+
+/**
+ * 用于记录可以发生修改的脏数据。
+ */
+export interface DirtyableValue {
+ /**
+ * 记录数据当前的值。
+ */
+ value: T;
+ /**
+ * 记录数据在修改前的全部历史值。
+ */
+ lastValues: T[];
+ /**
+ * 记录数据是否发生了更改。
+ */
+ dirty: boolean;
+}
+
+/**
+ * 转换一般的数据记录类型成为可记录修改的脏数据类型。
+ */
+export type Dirtyable = { [P in keyof T]: DirtyableValue };
diff --git a/src/utils/store_creator.ts b/src/utils/store_creator.ts
new file mode 100644
index 0000000..321345f
--- /dev/null
+++ b/src/utils/store_creator.ts
@@ -0,0 +1,56 @@
+//@ts-nocheck
+/* eslint-disable @typescript-eslint/no-unsafe-call */
+/* eslint-disable @typescript-eslint/no-unsafe-member-access */
+import { create, State, StateCreator, StoreApi, UseBoundStore } from 'zustand';
+import { immer } from 'zustand/middleware/immer';
+
+interface EnhancedStoreType {
+ use: {
+ [key in keyof StoreType]: () => StoreType[key];
+ };
+ reset: () => void;
+}
+
+type CreateStoreHookOptions = {
+ debug?: boolean;
+};
+
+/**
+ * 自动为一个Store Hook创建快速访问其中状态和Action的选择器。
+ */
+function createSelectors(
+ store: UseBoundStore>,
+ debug?: boolean
+): UseBoundStore> & EnhancedStoreType {
+ const initialState = store.getState();
+ (store as unknown).use = {};
+
+ Object.keys(store.getState()).forEach(key => {
+ const selector = (state: StoreType) => state[key as keyof StoreType];
+ (store as unknown).use[key] = () => store(selector);
+ });
+ (store as unknown).reset = () => store.setState(initialState, true);
+
+ if (debug ?? false) {
+ store.subscribe((current, previous) => {
+ console.log('[状态调试]Action应用前: ', previous);
+ console.log('[状态调试]Action应用后: ', current);
+ });
+ }
+
+ return store as UseBoundStore & EnhancedStoreType;
+}
+
+/**
+ * 自动嵌套使用Devtools和Immer中间件的Zustand创建Store Hook的函数。
+ * 同时将会自动应用创建快速访问状态和Action的选择器。
+ */
+export const createStoreHook = <
+ T extends State,
+ Mps extends [StoreMutatorIdentifier, unknown][] = [],
+ Mcs extends [StoreMutatorIdentifier, unknown][] = []
+>(
+ initializer: StateCreator,
+ options?: CreateStoreHookOptions
+): UseBoundStore> & EnhancedStoreType =>
+ createSelectors(create()(immer(initializer)), options?.debug ?? false);
diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json
new file mode 100644
index 0000000..0b89edf
--- /dev/null
+++ b/tsconfig.eslint.json
@@ -0,0 +1,11 @@
+{
+ "extends": "./tsconfig.json",
+ "include": [
+ "./src",
+ ".eslintrc.js",
+ ],
+ "exclude": [
+ "node_modules",
+ "dist"
+ ]
+}