25 lines
819 B
TypeScript
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;
|
|||
|
}
|