@magic_npm/simple-tools
Version:
`simple-tools` is a simple set of tools
61 lines (56 loc) • 2.21 kB
TypeScript
// useApi
export interface useApiModel<
Q extends object, // param 基础参数
OQ extends object | void, // outputModel 方法处理后参数
R extends object | unknown | void, // 接口返回值
RD extends object | void, // inputModel 返回值处理后结果
L extends object, // loading 对象
LK extends keyof L, // loading 对象所有的k
LS // loadingStart 方法返回值
> {
(
api: (arg?: OQ, opt?: any) => Promise<R>,
options?: useApiOptionsModel<R, RD, Q, OQ, L, LK, LS>
): [
useApiFuncModel<R, RD, Q, LK>,
useApiOptionsModel<R, RD, Q, OQ, L, LK, LS>['loading'],
useApiObjStatusModel<R, RD, LK, Q, OQ>
]
}
// useApi(useApiFuncModel, useApiOptionsModel)
export interface useApiFuncModel<R, RD, Q, LK> {
(query?: { [T in keyof Q]?: Q[T] }, loadingKey?: LK): Promise<useApiResDataModel<R, RD, LK>>
}
// useApi(useApiFuncModel, useApiOptionsModel)
export interface useApiOptionsModel<R, RD, Q, OQ, L, LK, LS> {
readonly isCancel?: boolean // 重复调用,关闭历史接口调用,只采用最新结果
readonly isRepeat?: boolean // 重复调用开关
readonly isSingle?: boolean // 单例模式开关,取第一次调用结果
readonly loading?: L // loading 状态
readonly params?: () => Q
// true & void 继续请求;false & Promise<reject> 阻止请求;
readonly before?: (params?: Q) => boolean | void | Promise<any>
readonly outputModel?: (params?: Q) => OQ
readonly inputModel?: (params?: R) => RD
readonly loadingStart?: (params?: Q, loadingKey?: LK) => LS
readonly loadingEnd?: (params?: LS) => void
readonly success?: (data?: RD, loadingKey?: LK, res?: R) => void
readonly error?: (err: string | Error | undefined) => void
}
export interface useApiObjStatusModel<R, RD, LK, Q, OQ> {
status: 0 | 1 | 2 | 3
sendNum: { [loadingKey: LK & string]: number } // 根据 loadingKey 来记录请求次数
sendLatestKey?: LK, // 最新请求的 loadingKey
pm?: Promise<R>
err?: string | Error
params?: Q
output?: OQ
result: useApiResDataModel<R, RD, LK>
cancelApi: () => Promise<void>
}
// 调用结果
export interface useApiResDataModel<R, RD, LK> {
res?: R
data?: RD
loadingKey?: LK
}