|
1
|
|
|
import React from "react" |
|
2
|
|
|
import { classNamesCheck } from "../src/check" |
|
3
|
|
|
import { EMPTY_OBJECT } from "../src/consts.json" |
|
4
|
|
|
import type { ClassHash, ClassNamesFrom, ClassNamesProperty } from "../src/types" |
|
5
|
|
|
import type { CssModule } from "../src/definitions.defs" |
|
6
|
|
|
|
|
7
|
|
|
export {} |
|
8
|
|
|
|
|
9
|
|
|
const Component = ({classnames: {App}}: ClassNamesProperty<{App: ClassHash}>) => <div className={App}/> |
|
10
|
|
|
|
|
11
|
|
|
const css_module_exact = { |
|
12
|
|
|
App: undefined |
|
13
|
|
|
} //as {App: string|undefined} |
|
14
|
|
|
, css_module = { |
|
15
|
|
|
App: undefined, |
|
16
|
|
|
"never-used": "bad" |
|
17
|
|
|
} |
|
18
|
|
|
, css_dictionary: CssModule = {} |
|
19
|
|
|
|
|
20
|
|
|
it(classNamesCheck.name, () => { |
|
21
|
|
|
<Component classnames={classNamesCheck()} />; |
|
22
|
|
|
//@ts-expect-error Property 'App' is missing |
|
23
|
|
|
<Component classnames={classNamesCheck({})} />; |
|
24
|
|
|
|
|
25
|
|
|
<Component classnames={classNamesCheck(css_dictionary)} />; |
|
26
|
|
|
|
|
27
|
|
|
<Component classnames={classNamesCheck(css_dictionary, {} as ClassNamesFrom<typeof Component>)} />; |
|
28
|
|
|
|
|
29
|
|
|
<Component classnames={classNamesCheck(css_module_exact)} />; |
|
30
|
|
|
<Component classnames={classNamesCheck(css_module)} />; |
|
31
|
|
|
<Component classnames={classNamesCheck(css_module_exact, {} as ClassNamesFrom<typeof Component>)} />; |
|
32
|
|
|
<Component classnames={classNamesCheck<ClassNamesFrom<typeof Component>, typeof css_module_exact>(css_module_exact)} />; |
|
33
|
|
|
<Component classnames={classNamesCheck( |
|
34
|
|
|
css_module, |
|
35
|
|
|
//@ts-expect-error Property 'never-used' is missing |
|
36
|
|
|
{} as ClassNamesFrom<typeof Component>) |
|
37
|
|
|
} />; |
|
38
|
|
|
|
|
39
|
|
|
<Component classnames={classNamesCheck< |
|
40
|
|
|
//@ts-expect-error Type 'ClassNamesFrom<typeof Component>' does not satisfy the constraint |
|
41
|
|
|
ClassNamesFrom<typeof Component>, |
|
42
|
|
|
typeof css_module |
|
43
|
|
|
>(css_module)} />; |
|
44
|
|
|
|
|
45
|
|
|
expect(true).toBe(true) |
|
46
|
|
|
}) |
|
47
|
|
|
|
|
48
|
|
|
it("research", () => { |
|
49
|
|
|
//@ts-expect-error Property 'App' is missing |
|
50
|
|
|
<Component classnames={{} as Record<string, ClassHash>} />; |
|
51
|
|
|
<Component classnames={{} as never} />; |
|
52
|
|
|
<Component classnames={{} as any} />; |
|
53
|
|
|
//@ts-expect-error Type 'unknown' is not assignable |
|
54
|
|
|
<Component classnames={{} as unknown} />; |
|
55
|
|
|
<Component classnames={{App: undefined, |
|
56
|
|
|
//@ts-expect-error Object literal may only specify known properties, and 'App__bad' does not exist |
|
57
|
|
|
App__bad: "bad" |
|
58
|
|
|
}} />; |
|
59
|
|
|
<Component classnames={css_module} />; |
|
60
|
|
|
<Component classnames={css_module as ClassNamesFrom<typeof Component>} />; |
|
61
|
|
|
expect(true).toBe(true) |
|
62
|
|
|
}) |
|
63
|
|
|
|
|
64
|
|
|
it("check", () => { |
|
65
|
|
|
function check0< |
|
66
|
|
|
//@ts-expect-error |
|
67
|
|
|
C extends T, |
|
68
|
|
|
T extends CssModule = CssModule>(source = EMPTY_OBJECT as T) { |
|
69
|
|
|
return source |
|
70
|
|
|
} |
|
71
|
|
|
|
|
72
|
|
|
// function check0<C extends T, T extends CssModule = CssModule>(source = EMPTY_OBJECT as T) :C { |
|
73
|
|
|
// return source as C |
|
74
|
|
|
// } |
|
75
|
|
|
|
|
76
|
|
|
<Component classnames={check0()} />; |
|
77
|
|
|
//@ts-expect-error Property 'App' is missing |
|
78
|
|
|
<Component classnames={check0({})} />; |
|
79
|
|
|
<Component classnames={check0(css_module_exact)} />; |
|
80
|
|
|
//TODO #16 @ts-expect-error |
|
81
|
|
|
<Component classnames={check0(css_module)} />; |
|
82
|
|
|
|
|
83
|
|
|
//@ts-expect-error Property 'App' is missing in type 'CssModule' |
|
84
|
|
|
<Component classnames |
|
85
|
|
|
={check0<ClassNamesFrom<typeof Component>>(css_module)} />; |
|
86
|
|
|
|
|
87
|
|
|
<Component classnames={check0< |
|
88
|
|
|
//@ts-expect-error Property 'never-used' is missing in type 'ClassNamesFrom<typeof Component>' |
|
89
|
|
|
ClassNamesFrom<typeof Component>, |
|
90
|
|
|
typeof css_module |
|
91
|
|
|
>(css_module)} />; |
|
92
|
|
|
|
|
93
|
|
|
function check2<T extends CssModule = CssModule, C extends {[K in keyof T]: ClassHash} = T>( |
|
94
|
|
|
source = EMPTY_OBJECT as T, |
|
95
|
|
|
_ = EMPTY_OBJECT as C |
|
96
|
|
|
) {return source} |
|
97
|
|
|
|
|
98
|
|
|
<Component classnames={check2()} />; |
|
99
|
|
|
//@ts-expect-error Property 'App' is missing |
|
100
|
|
|
<Component classnames={check2({})} />; |
|
101
|
|
|
<Component classnames={check2(css_module_exact, {} as ClassNamesFrom<typeof Component>)} />; |
|
102
|
|
|
<Component classnames={check2<typeof css_module_exact, ClassNamesFrom<typeof Component>>(css_module_exact)} />; |
|
103
|
|
|
<Component classnames={check2(css_module, |
|
104
|
|
|
//@ts-expect-error Property 'never-used' is missing |
|
105
|
|
|
{} as ClassNamesFrom<typeof Component>) |
|
106
|
|
|
} />; |
|
107
|
|
|
<Component classnames={check2< |
|
108
|
|
|
typeof css_module, |
|
109
|
|
|
//@ts-expect-error Type 'ClassNamesFrom<typeof Component>' does not satisfy the constraint |
|
110
|
|
|
ClassNamesFrom<typeof Component> |
|
111
|
|
|
>(css_module)} />; |
|
112
|
|
|
|
|
113
|
|
|
expect(true).toBe(true) |
|
114
|
|
|
}) |
|
115
|
|
|
|