Skip to content

Commit f39ea6e

Browse files
New approach for ScaledSheet types (#83)
1 parent 2f034aa commit f39ea6e

File tree

1 file changed

+17
-55
lines changed

1 file changed

+17
-55
lines changed

index.d.ts

+17-55
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,6 @@
1-
import * as RN from "react-native";
2-
3-
declare module "react-native-size-matters" {
4-
interface StringifiedStyles {
5-
fontSize?: string | number;
6-
letterSpacing?: string | number;
7-
lineHeight?: string | number;
8-
textShadowRadius?: string | number;
9-
borderBottomLeftRadius?: string | number;
10-
borderBottomRightRadius?: string | number;
11-
borderTopLeftRadius?: string | number;
12-
borderTopRightRadius?: string | number;
13-
borderBottomWidth?: string | number;
14-
borderTopWidth?: string | number;
15-
borderRightWidth?: string | number;
16-
borderLeftWidth?: string | number;
17-
borderRadius?: string | number;
18-
shadowRadius?: string | number;
19-
borderWidth?: string | number;
20-
aspectRatio?: string | number;
21-
rotation?: string | number;
22-
scaleX?: string | number;
23-
scaleY?: string | number;
24-
translateX?: string | number;
25-
translateY?: string | number;
26-
padding?: string | number;
27-
paddingLeft?: string | number;
28-
paddingRight?: string | number;
29-
paddingTop?: string | number;
30-
paddingBottom?: string | number;
31-
paddingHorizontal?: string | number;
32-
paddingVertical?: string | number;
33-
margin?: string | number;
34-
marginLeft?: string | number;
35-
marginRight?: string | number;
36-
marginTop?: string | number;
37-
marginBottom?: string | number;
38-
marginHorizontal?: string | number;
39-
marginVertical?: string | number;
40-
top?: string | number;
41-
left?: string | number;
42-
right?: string | number;
43-
bottom?: string | number;
44-
width?: string | number;
45-
height?: string | number;
46-
minWidth?: string | number;
47-
minHeight?: string | number;
48-
maxWidth?: string | number;
49-
maxHeight?: string | number;
50-
}
1+
import * as RN from 'react-native';
512

3+
declare module 'react-native-size-matters' {
524
export function scale(size: number): number;
535
export function verticalScale(size: number): number;
546
export function moderateScale(size: number, factor?: number): number;
@@ -58,14 +10,24 @@ declare module "react-native-size-matters" {
5810
export function ms(size: number, factor?: number): number;
5911
export function mvs(size: number, factor?: number): number;
6012

61-
type ViewStyle = Omit<RN.ViewStyle, keyof StringifiedStyles> & StringifiedStyles;
62-
type TextStyle = Omit<RN.TextStyle, keyof StringifiedStyles> & StringifiedStyles;
63-
type ImageStyle = Omit<RN.ImageStyle, keyof StringifiedStyles> & StringifiedStyles;
13+
type Scale = `${number}@s`;
14+
type VerticalScale = `${number}@vs`;
15+
type ModerateScale = `${number}@ms${number | ''}`;
16+
type ModerateVerticalScale = `${number}@mvs${number | ''}`;
17+
type Size = Scale | VerticalScale | ModerateScale | ModerateVerticalScale;
18+
type WithSize<T> = { [P in keyof T]: number extends T[P] ? Size | T[P] : T[P] };
19+
type ViewStyle = WithSize<RN.ViewStyle>;
20+
type TextStyle = WithSize<RN.TextStyle>;
21+
type ImageStyle = WithSize<RN.ImageStyle>;
6422
type NamedStyles<T> = { [P in keyof T]: ViewStyle | TextStyle | ImageStyle };
6523

6624
export namespace ScaledSheet {
67-
export function create<T extends NamedStyles<T> | NamedStyles<any>>(stylesObject: T): {
68-
[P in keyof T]: RN.RegisteredStyle<T[P] & Record<Extract<keyof T[P], keyof StringifiedStyles>, number>>
25+
export function create<T extends NamedStyles<T> | NamedStyles<any>>(
26+
stylesObject: T,
27+
): {
28+
[P in keyof T]: RN.RegisteredStyle<{
29+
[S in keyof T[P]]: T[P][S] extends Size ? number : T[P][S];
30+
}>;
6931
};
7032
}
7133
}

0 commit comments

Comments
 (0)