Total Complexity | 3 |
Complexity/F | 1 |
Lines of Code | 35 |
Function Count | 3 |
Duplicated Lines | 0 |
Ratio | 0 % |
Changes | 0 |
1 | import { ClassHash } from "../../src/main.types" |
||
2 | |||
3 | type Props = { |
||
4 | Btn: ClassHash |
||
5 | isValid: boolean |
||
6 | isOpen?: boolean |
||
7 | } |
||
8 | |||
9 | const { |
||
10 | Btn, |
||
11 | isOpen, |
||
12 | isValid |
||
13 | } = {} as Props |
||
14 | |||
15 | classNaming( |
||
16 | guard1({Btn, Btn__Open: isOpen, Btn__Valid: isValid}) |
||
17 | ) |
||
18 | //@ts-expect-error |
||
19 | guard2({Btn, Btn__Open: isOpen, Btn__Valid: isValid}) |
||
20 | |||
21 | function guard1< |
||
22 | E extends Record<string, ClassHash|boolean> |
||
23 | >(source: E) { |
||
24 | return source as unknown as {[K in keyof E]: E[K] extends boolean ? boolean : E[K] extends ClassHash ? ClassHash : never} |
||
25 | } |
||
26 | |||
27 | function guard2<T>(source: T extends Record<infer K, ClassHash|boolean> ? { |
||
28 | [k in K]: T[k] extends boolean ? T[k] : T[k] extends ClassHash ? T[k] : never |
||
29 | } : never) { |
||
30 | return source |
||
31 | } |
||
32 | |||
33 | function classNaming<T>(source: T) { |
||
34 | return source |
||
35 | } |