@opensig/opendesign
Version:
<p align="center"><img src="../docs/public/opendesign-logo-light.png"/></p> <h1 align="center">opendesign</h1> <p align="center">一个 Vue 3 组件库</p> <p align="center"><b>皮肤可定制,使用 TypeScript</b></p>
48 lines (47 loc) • 1.16 kB
TypeScript
export type DocDemoSchema = {
type: 'boolean';
default?: boolean;
label?: string;
} | {
type: 'list';
list: Array<string | number> | Readonly<Array<string | number>>;
default?: string | number;
label?: string;
} | {
type: 'string';
default?: string;
label?: string;
} | {
type: 'textarea';
default?: string;
label?: string;
row?: number;
} | {
type: 'number';
step?: number;
min?: number;
max?: number;
default?: number;
label?: string;
} | {
type: 'radio';
default?: string | number;
list: Array<string | number>;
};
export type DocDemoState<T> = T extends Record<string, any> ? {
[key in keyof T]: T[key] extends {
type: 'list';
list: Array<infer U>;
} ? U : T[key] extends {
type: 'radio';
list: Array<infer U>;
} ? U : T[key] extends {
type: 'boolean';
} ? boolean : T[key] extends {
type: 'number';
} ? number : T[key] extends {
type: 'string';
} ? string : never;
} : T;
export type DocDemoTemplate<T> = ((props: DocDemoState<T>) => string) | string;
export type DocDemoStyle = string;