Skip to content
This repository was archived by the owner on Jun 15, 2023. It is now read-only.

Commit 3f8eb8b

Browse files
mununkicristianoc
authored andcommitted
fix props type constraint generalized
1 parent 8066e11 commit 3f8eb8b

File tree

3 files changed

+24
-15
lines changed

3 files changed

+24
-15
lines changed

cli/reactjs_jsx_v4.ml

+12-3
Original file line numberDiff line numberDiff line change
@@ -774,7 +774,10 @@ let transformStructureItem ~config mapper item =
774774
(Location.mkloc (Lident "props") pstr_loc)
775775
(match coreTypeOfAttr with
776776
| None -> makePropsTypeParams namedTypeList
777-
| Some _ -> typVarsOfCoreType)
777+
| Some _ -> (
778+
match typVarsOfCoreType with
779+
| [] -> []
780+
| _ -> [Typ.any ()]))
778781
in
779782
(* type props<'x, 'y> = { x: 'x, y?: 'y, ... } *)
780783
let propsRecordType =
@@ -1149,7 +1152,10 @@ let transformStructureItem ~config mapper item =
11491152
makePropsTypeParams ~stripExplicitOption:true
11501153
~stripExplicitJsNullableOfRef:hasForwardRef
11511154
namedTypeList
1152-
| Some _ -> typVarsOfCoreType)))
1155+
| Some _ -> (
1156+
match typVarsOfCoreType with
1157+
| [] -> []
1158+
| _ -> [Typ.any ()]))))
11531159
expression
11541160
in
11551161
(* let make = ({id, name, ...}: props<'id, 'name, ...>) => { ... } *)
@@ -1255,7 +1261,10 @@ let transformSignatureItem ~config _mapper item =
12551261
(Location.mkloc (Lident "props") psig_loc)
12561262
(match coreTypeOfAttr with
12571263
| None -> makePropsTypeParams namedTypeList
1258-
| Some _ -> typVarsOfCoreType)
1264+
| Some _ -> (
1265+
match typVarsOfCoreType with
1266+
| [] -> []
1267+
| _ -> [Typ.any ()]))
12591268
in
12601269
let propsRecordType =
12611270
makePropsRecordTypeSig ~coreTypeOfAttr ~typVarsOfCoreType "props"

tests/ppx/react/expected/sharedProps.res.txt

+8-8
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ module V4C1 = {
1414
module V4C2 = {
1515
type props<'a> = sharedProps<'a>
1616

17-
@react.component(: sharedProps<'a>) let make = ({x, y, _}: props<'a>) => React.string(x ++ y)
17+
@react.component(: sharedProps<'a>) let make = ({x, y, _}: props<_>) => React.string(x ++ y)
1818
let make = {
1919
let \"SharedProps$V4C2" = (props: props<_>) => make(props)
2020

@@ -26,7 +26,7 @@ module V4C3 = {
2626
type props<'a> = sharedProps<string, 'a>
2727

2828
@react.component(: sharedProps<string, 'a>)
29-
let make = ({x, y, _}: props<'a>) => React.string(x ++ y)
29+
let make = ({x, y, _}: props<_>) => React.string(x ++ y)
3030
let make = {
3131
let \"SharedProps$V4C3" = (props: props<_>) => make(props)
3232

@@ -54,13 +54,13 @@ module V4C5 = {
5454
module V4C6 = {
5555
type props<'a> = sharedProps<'a>
5656

57-
external make: React.componentLike<props<'a>, React.element> = "default"
57+
external make: React.componentLike<props<_>, React.element> = "default"
5858
}
5959

6060
module V4C7 = {
6161
type props<'a> = sharedProps<string, 'a>
6262

63-
external make: React.componentLike<props<'a>, React.element> = "default"
63+
external make: React.componentLike<props<_>, React.element> = "default"
6464
}
6565

6666
module V4C8 = {
@@ -85,7 +85,7 @@ module V4A1 = {
8585
module V4A2 = {
8686
type props<'a> = sharedProps<'a>
8787

88-
@react.component(: sharedProps<'a>) let make = ({x, y, _}: props<'a>) => React.string(x ++ y)
88+
@react.component(: sharedProps<'a>) let make = ({x, y, _}: props<_>) => React.string(x ++ y)
8989
let make = {
9090
let \"SharedProps$V4A2" = (props: props<_>) => make(props)
9191

@@ -97,7 +97,7 @@ module V4A3 = {
9797
type props<'a> = sharedProps<string, 'a>
9898

9999
@react.component(: sharedProps<string, 'a>)
100-
let make = ({x, y, _}: props<'a>) => React.string(x ++ y)
100+
let make = ({x, y, _}: props<_>) => React.string(x ++ y)
101101
let make = {
102102
let \"SharedProps$V4A3" = (props: props<_>) => make(props)
103103

@@ -125,13 +125,13 @@ module V4A5 = {
125125
module V4A6 = {
126126
type props<'a> = sharedProps<'a>
127127

128-
external make: React.componentLike<props<'a>, React.element> = "default"
128+
external make: React.componentLike<props<_>, React.element> = "default"
129129
}
130130

131131
module V4A7 = {
132132
type props<'a> = sharedProps<string, 'a>
133133

134-
external make: React.componentLike<props<'a>, React.element> = "default"
134+
external make: React.componentLike<props<_>, React.element> = "default"
135135
}
136136

137137
module V4A8 = {

tests/ppx/react/expected/sharedProps.resi.txt

+4-4
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ module V4C1: {
99
module V4C2: {
1010
type props<'a> = sharedProps<'a>
1111

12-
let make: React.componentLike<props<'a>, React.element>
12+
let make: React.componentLike<props<_>, React.element>
1313
}
1414

1515
module V4C3: {
1616
type props<'a> = sharedProps<string, 'a>
1717

18-
let make: React.componentLike<props<'a>, React.element>
18+
let make: React.componentLike<props<_>, React.element>
1919
}
2020

2121
module V4C4: {
@@ -35,13 +35,13 @@ module V4A1: {
3535
module V4A2: {
3636
type props<'a> = sharedProps<'a>
3737

38-
let make: React.componentLike<props<'a>, React.element>
38+
let make: React.componentLike<props<_>, React.element>
3939
}
4040

4141
module V4A3: {
4242
type props<'a> = sharedProps<string, 'a>
4343

44-
let make: React.componentLike<props<'a>, React.element>
44+
let make: React.componentLike<props<_>, React.element>
4545
}
4646

4747
module V4A4: {

0 commit comments

Comments
 (0)