type.ts 974 字节
Newer Older
fxy060608's avatar
fxy060608 已提交
1 2 3 4 5 6 7 8 9 10 11 12
export type Data = Record<string, unknown>
type DefaultFactory<T> = (protocols: Data) => T | null | undefined
type ProtocolConstructor<T = any> =
  | { new (...args: any[]): T & object }
  | { (): T }
  | ProtocolMethod<T>

type ProtocolMethod<T, TConstructor = any> = T extends (...args: any) => any
  ? { new (): TConstructor; (): T; readonly prototype: TConstructor }
  : never
type ProtocolType<T> = ProtocolConstructor<T> | ProtocolConstructor<T>[]

fxy060608's avatar
fxy060608 已提交
13
type Validator = (value: any, params: Record<string, any>) => void
fxy060608's avatar
fxy060608 已提交
14 15 16 17 18 19 20 21
export interface ApiProtocol {
  [name: string]: ProtocolOptions
}

export interface ApiOptions {
  beforeAll?: () => void
  beforeSuccess?: () => void
  formatArgs?: {
fxy060608's avatar
fxy060608 已提交
22
    [name: string]: Validator
fxy060608's avatar
fxy060608 已提交
23 24 25 26 27 28 29 30
  }
}

export interface ProtocolOptions<T = any, D = T> {
  name?: string
  type?: ProtocolType<T> | true | null
  required?: boolean
  default?: D | DefaultFactory<D> | null | undefined | object
fxy060608's avatar
fxy060608 已提交
31
  validator?(value: any): boolean | undefined | string
fxy060608's avatar
fxy060608 已提交
32
}