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/main.types" |
5
|
|
|
import type { CssModule } from "../src/definitions.types" |
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("research ", () => { |
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
|
|
|
//#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
|
|
|
|