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

25 lines
819 B
TypeScript
Raw Normal View History

2024-02-18 06:52:01 +00:00
/** 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;
}