mentalHealth/01-Web/packages/utils/common/defines.ts

25 lines
819 B
TypeScript

/** API 命名 - 前缀类型 */
type API_PREFIX = 'ADD' | 'DEL' | 'SET' | 'GET';
/** API 命名 - 键名检查 */
type NameCheck<N extends string, Prev extends string = ''> = N extends `${infer L extends
| Uppercase<Alphabet>
| '_'}${infer R}`
? NameCheck<R, `${Prev}${L}`>
: Prev extends `${infer S}_`
? S
: Prev;
/**
* 定义 API 对象
*
* @export
* @description 限制参数数量为一个,与 reducer 函数对应
* @param {L} api API 对象,名称格式以 "ADD" | "DEL" | "SET" | "GET" 开头,以 "_" 作为连字符,全大写英文字母命名
*/
export function defineApis<L extends Record<keyof L, (...args: any[]) => Res.Promises>>(api: {
[K in keyof L]: K extends `${API_PREFIX}_${infer S}` ? (S extends NameCheck<S> ? L[K] : never) : never;
}): Readonly<L> {
return api;
}