Types Helpers
ts
export type Data<T = any> = Record<string, T>
export type TreeNode<T = Data> = T & { children?: TreeNode<T>[] }
ts
import type Node from 'element-plus/es/components/tree/src/model/node'
import type { ComponentSize } from 'element-plus'
export type ElSize = ComponentSize
export type ElTreeNode = Node
ts
// lodash.get
type GetIndexedField<T, K> = K extends keyof T
? T[K]
: K extends `${number}`
? 'length' extends keyof T
? number extends T['length']
? number extends keyof T
? T[number]
: undefined
: undefined
: undefined
: undefined
type FieldWithPossiblyUndefined<T, Key> = GetFieldType<Exclude<T, undefined>, Key> | Extract<T, undefined>
type IndexedFieldWithPossiblyUndefined<T, Key> = GetIndexedField<Exclude<T, undefined>, Key> | Extract<T, undefined>
export type GetFieldType<T, P> = P extends `${infer Left}.${infer Right}`
? Left extends keyof Exclude<T, undefined>
? FieldWithPossiblyUndefined<Exclude<T, undefined>[Left], Right> | Extract<T, undefined>
: Left extends `${infer FieldKey}[${infer IndexKey}]`
? FieldKey extends keyof T
? FieldWithPossiblyUndefined<IndexedFieldWithPossiblyUndefined<T[FieldKey], IndexKey>, Right>
: undefined
: undefined
: P extends keyof T
? T[P]
: P extends `${infer FieldKey}[${infer IndexKey}]`
? FieldKey extends keyof T
? IndexedFieldWithPossiblyUndefined<T[FieldKey], IndexKey>
: undefined
: IndexedFieldWithPossiblyUndefined<T, P>
ts
export interface Page extends Sort {
current?: number
size?: number
/** @deprecated */
pageNum?: number
/** @deprecated */
pageSize?: number
}
export interface Sort {
ascs?: string
descs?: string
/** @deprecated */
order?: string
/** @deprecated */
prop?: string
}
export type Res<T = any> = { code: number, msg: string } & T
export type ResData<T = any> = Res<{ data: T }>
export type ResRows<T = any> = Res<{ rows: T, total: number }>
export type ResRecords<T = any> = ResData<{ records: T, current: number, pages: number, size: number, total: number }>