Skip to content

Commit 8dfeab9

Browse files
committed
feat: improve types for dynamic functions
1 parent cad552e commit 8dfeab9

File tree

3 files changed

+23
-21
lines changed

3 files changed

+23
-21
lines changed

example/src/examples/Extreme.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@ const stylesheet = createStyles(theme => ({
2424
backgroundColor: {
2525
xs: theme.colors.oak,
2626
md: theme.colors.sky
27-
},
28-
shadowOpacity: 20
27+
}
2928
}),
3029
text: {
3130
height: 100,

src/types.ts

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -64,23 +64,17 @@ type UnistyleView = Omit<Omit<ViewStyle, 'shadowOffset'>, 'transform'>
6464
type UnistyleText = Omit<Omit<TextStyle, 'shadowOffset'>, 'transform'>
6565
type UnistyleImage = Omit<Omit<ImageStyle, 'shadowOffset'>, 'transform'>
6666

67-
export type CustomNamedStyles<T, B extends Record<string, number>> = {
68-
[P in keyof T]:
69-
| (UnistyleView| StyleProperty<UnistyleView, B>)
67+
export type StaticStyles<B extends Record<string, number>> =
68+
| (UnistyleView | StyleProperty<UnistyleView, B>)
7069
| (UnistyleText | StyleProperty<UnistyleText, B>)
7170
| (UnistyleImage | StyleProperty<UnistyleImage, B>)
72-
| ShadowOffsetProps<B>
73-
| TransformProps<B>
74-
| (
75-
(...args: Array<never>) =>
76-
| (UnistyleView| StyleProperty<UnistyleView, B>)
77-
| (UnistyleText | StyleProperty<UnistyleText, B>)
78-
| (UnistyleImage | StyleProperty<UnistyleImage, B>)
79-
| ShadowOffsetProps<B>
80-
| TransformProps<B>
81-
)
82-
}
71+
& TransformProps<B> & ShadowOffsetProps<B>
8372

73+
export type CustomNamedStyles<T, B extends Record<string, number>> = {
74+
[K in keyof T]: T[K] extends (...args: infer A) => unknown
75+
? (...args: A) => StaticStyles<B>
76+
: StaticStyles<B>
77+
}
8478
export type ExtractBreakpoints<T, B extends Record<string, number>> = T extends Partial<Record<keyof B & string, infer V>>
8579
? V
8680
: T extends (...args: infer A) => infer R

src/utils/styles.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,10 @@ export const parseStyle = <T, B extends Record<string, number>>(
6262
screenSize: ScreenSize,
6363
breakpoints: B
6464
): T => {
65-
const entries = Object.entries(style) as [[keyof T, CustomNamedStyles<T, B>]]
65+
const entries = Object.entries(style) as [[
66+
keyof T,
67+
CustomNamedStyles<T, B> | Record<keyof B & string, string | number | undefined>]
68+
]
6669

6770
return Object
6871
.fromEntries(entries
@@ -72,7 +75,7 @@ export const parseStyle = <T, B extends Record<string, number>>(
7275
if (isNestedStyle) {
7376
return [
7477
key,
75-
parseStyle(value, breakpoint, screenSize, breakpoints)
78+
parseStyle(value as CustomNamedStyles<T, B>, breakpoint, screenSize, breakpoints)
7679
]
7780
}
7881

@@ -92,9 +95,15 @@ export const parseStyle = <T, B extends Record<string, number>>(
9295
return [key, value]
9396
}
9497

95-
const valueWithBreakpoint = value as Record<keyof B & string, string | number>
96-
97-
return [key, getValueForBreakpoint<B>(valueWithBreakpoint, breakpoint, screenSize, breakpoints)]
98+
return [
99+
key,
100+
getValueForBreakpoint<B>(
101+
value as Record<keyof B & string, string | number | undefined>,
102+
breakpoint,
103+
screenSize,
104+
breakpoints
105+
)
106+
]
98107
})
99108
)
100109
}

0 commit comments

Comments
 (0)