Skip to content

Commit 67855c4

Browse files
committed
Fix typecheck
1 parent 9925e06 commit 67855c4

2 files changed

Lines changed: 15 additions & 11 deletions

File tree

packages/component/src/Icon/ComponentIcon.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ function BaseComponentIcon(props: InferInput<typeof baseComponentIconPropsSchema
3939

4040
const { component: ComponentIcon, modifierPropsSchema: componentIconModifiersPropsSchema } = createIconComponent(
4141
styles,
42-
['appearance', 'direction', 'icon'],
42+
['appearance', 'direction', 'icon'] as const,
4343
BaseComponentIcon
4444
);
4545

packages/component/src/Utils/createIconComponent.tsx

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,19 @@ type ModifierMap<T> = {
1212
[P in Prefixes<keyof T>]?: SuffixesOf<P, keyof T>;
1313
};
1414

15+
type SafeModifierList<TCSSModfuleClasses> = keyof ModifierMap<TCSSModfuleClasses> extends never
16+
? string
17+
: keyof ModifierMap<TCSSModfuleClasses>;
18+
1519
function createPropsSchema<
1620
const TCSSModfuleClasses extends CSSModuleClasses,
17-
const TModifiers extends Array<keyof ModifierMap<TCSSModfuleClasses>>
18-
>(styles: TCSSModfuleClasses, modifiers: TModifiers) {
21+
const TModifiers extends SafeModifierList<TCSSModfuleClasses>
22+
>(styles: TCSSModfuleClasses, modifiers: TModifiers[]) {
1923
type CSSModuleModifiers = ModifierMap<TCSSModfuleClasses>;
2024

2125
const props = Object.keys(styles).reduce((acc, key) => {
2226
const [base, modifier] = key.split('--') as [keyof CSSModuleModifiers, string | undefined];
23-
if (modifier && modifiers.includes(base)) {
27+
if (modifier && modifiers.includes(base as unknown as TModifiers)) {
2428
acc.has(base) || acc.set(base, new Set());
2529
acc.get(base).add(modifier);
2630
}
@@ -32,8 +36,8 @@ function createPropsSchema<
3236
Object.fromEntries(
3337
Array.from(props.entries()).map(([base, modifiers]) => [base, optional(picklist(Array.from(modifiers)))])
3438
) as unknown as {
35-
[key in TModifiers[number]]: OptionalSchema<
36-
PicklistSchema<Array<CSSModuleModifiers[key]>, undefined>,
39+
[key in TModifiers]: OptionalSchema<
40+
PicklistSchema<Array<key extends keyof CSSModuleModifiers ? CSSModuleModifiers[key] : string>, undefined>,
3741
undefined
3842
>;
3943
}
@@ -44,15 +48,15 @@ function createPropsSchema<
4448

4549
export default function createIconComponent<
4650
const TProps extends { className?: string | undefined },
47-
const TModifiers extends Array<keyof ModifierMap<TCSSModfuleClasses>>,
51+
const TModifiers extends SafeModifierList<TCSSModfuleClasses>,
4852
const TCSSModfuleClasses extends CSSModuleClasses
49-
>(styles: TCSSModfuleClasses, modifiers: TModifiers, BaseIcon: ComponentType<TProps>) {
53+
>(styles: TCSSModfuleClasses, modifiers: TModifiers[], BaseIcon: ComponentType<TProps>) {
5054
type CSSModuleModifiers = ModifierMap<TCSSModfuleClasses>;
5155

5256
// Do not bail if no CSS modules TypeScript plugin is provided.
53-
type FinalCSSModuleModifiers = keyof CSSModuleModifiers extends never
54-
? Record<keyof TModifiers[number], string>
55-
: Pick<CSSModuleModifiers, TModifiers[number]>;
57+
type FinalCSSModuleModifiers = TModifiers extends keyof CSSModuleModifiers
58+
? Pick<CSSModuleModifiers, TModifiers>
59+
: Partial<Record<TModifiers, string>>;
5660

5761
const modifierPropsSchema = createPropsSchema(styles, modifiers);
5862

0 commit comments

Comments
 (0)