Passed
Push — main ( c3163a...9d001c )
by Andrii
03:28
created

__sandbox__/omitters/mix.ts   A

Complexity

Total Complexity 3
Complexity/F 1

Size

Lines of Code 35
Function Count 3

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 3
eloc 25
mnd 0
bc 0
fnc 3
dl 0
loc 35
rs 10
bpm 0
cpm 1
noi 0
c 0
b 0
f 0

3 Functions

Rating   Name   Duplication   Size   Complexity  
A mix.ts ➔ classNaming 0 3 1
A mix.ts ➔ guard2 0 5 1
A mix.ts ➔ guard1 0 5 1
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
}