@@ -749,6 +749,92 @@ ruleTester.run('require-default-props', rule, {
749
749
] . join ( '\n' ) ,
750
750
parser : 'babel-eslint' ,
751
751
options : [ { forbidDefaultForRequired : true } ]
752
+ } ,
753
+ // test support for React PropTypes as Component's class generic
754
+ {
755
+ code : [
756
+ 'type HelloProps = {' ,
757
+ ' foo: string,' ,
758
+ ' bar?: string' ,
759
+ '};' ,
760
+
761
+ 'class Hello extends React.Component<HelloProps> {' ,
762
+ ' static defaultProps = {' ,
763
+ ' bar: "bar"' ,
764
+ ' }' ,
765
+
766
+ ' render() {' ,
767
+ ' return <div>Hello {this.props.foo}</div>;' ,
768
+ ' }' ,
769
+ '}'
770
+ ] . join ( '\n' ) ,
771
+ parser : 'babel-eslint' ,
772
+ options : [ { forbidDefaultForRequired : true } ]
773
+ } ,
774
+ {
775
+ code : [
776
+ 'type HelloProps = {' ,
777
+ ' foo: string,' ,
778
+ ' bar?: string' ,
779
+ '};' ,
780
+
781
+ 'class Hello extends Component<HelloProps> {' ,
782
+ ' static defaultProps = {' ,
783
+ ' bar: "bar"' ,
784
+ ' }' ,
785
+
786
+ ' render() {' ,
787
+ ' return <div>Hello {this.props.foo}</div>;' ,
788
+ ' }' ,
789
+ '}'
790
+ ] . join ( '\n' ) ,
791
+ parser : 'babel-eslint' ,
792
+ options : [ { forbidDefaultForRequired : true } ]
793
+ } ,
794
+ {
795
+ code : [
796
+ 'type HelloProps = {' ,
797
+ ' foo: string,' ,
798
+ ' bar?: string' ,
799
+ '};' ,
800
+
801
+ 'type HelloState = {' ,
802
+ ' dummyState: string' ,
803
+ '};' ,
804
+
805
+ 'class Hello extends Component<HelloProps, HelloState> {' ,
806
+ ' static defaultProps = {' ,
807
+ ' bar: "bar"' ,
808
+ ' }' ,
809
+
810
+ ' render() {' ,
811
+ ' return <div>Hello {this.props.foo}</div>;' ,
812
+ ' }' ,
813
+ '}'
814
+ ] . join ( '\n' ) ,
815
+ parser : 'babel-eslint' ,
816
+ options : [ { forbidDefaultForRequired : true } ]
817
+ } ,
818
+ {
819
+ code : [
820
+ 'type HelloProps = {' ,
821
+ ' foo?: string,' ,
822
+ ' bar?: string' ,
823
+ '};' ,
824
+
825
+ 'class Hello extends Component<HelloProps> {' ,
826
+ ' static defaultProps = {' ,
827
+ ' foo: "foo",' ,
828
+ ' bar: "bar"' ,
829
+ ' }' ,
830
+
831
+ ' render() {' ,
832
+ ' return <div>Hello {this.props.foo}</div>;' ,
833
+ ' }' ,
834
+ '}'
835
+ ] . join ( '\n' ) ,
836
+ parser : 'babel-eslint' ,
837
+ options : [ { forbidDefaultForRequired : true } ]
752
838
}
753
839
] ,
754
840
@@ -2006,6 +2092,89 @@ ruleTester.run('require-default-props', rule, {
2006
2092
errors : [ {
2007
2093
message : 'propType "foo" is required and should not have a defaultProp declaration.'
2008
2094
} ]
2095
+ } ,
2096
+ // test support for React PropTypes as Component's class generic
2097
+ {
2098
+ code : [
2099
+ 'type HelloProps = {' ,
2100
+ ' foo: string,' ,
2101
+ ' bar?: string' ,
2102
+ '};' ,
2103
+
2104
+ 'class Hello extends React.Component<HelloProps> {' ,
2105
+
2106
+ ' render() {' ,
2107
+ ' return <div>Hello {this.props.foo}</div>;' ,
2108
+ ' }' ,
2109
+ '}'
2110
+ ] . join ( '\n' ) ,
2111
+ parser : 'babel-eslint' ,
2112
+ errors : [ {
2113
+ message : 'propType "bar" is not required, but has no corresponding defaultProp declaration.'
2114
+ } ]
2115
+ } ,
2116
+ {
2117
+ code : [
2118
+ 'type HelloProps = {' ,
2119
+ ' foo: string,' ,
2120
+ ' bar?: string' ,
2121
+ '};' ,
2122
+
2123
+ 'class Hello extends Component<HelloProps> {' ,
2124
+
2125
+ ' render() {' ,
2126
+ ' return <div>Hello {this.props.foo}</div>;' ,
2127
+ ' }' ,
2128
+ '}'
2129
+ ] . join ( '\n' ) ,
2130
+ parser : 'babel-eslint' ,
2131
+ errors : [ {
2132
+ message : 'propType "bar" is not required, but has no corresponding defaultProp declaration.'
2133
+ } ]
2134
+ } ,
2135
+ {
2136
+ code : [
2137
+ 'type HelloProps = {' ,
2138
+ ' foo: string,' ,
2139
+ ' bar?: string' ,
2140
+ '};' ,
2141
+
2142
+ 'type HelloState = {' ,
2143
+ ' dummyState: string' ,
2144
+ '};' ,
2145
+
2146
+ 'class Hello extends Component<HelloProps, HelloState> {' ,
2147
+
2148
+ ' render() {' ,
2149
+ ' return <div>Hello {this.props.foo}</div>;' ,
2150
+ ' }' ,
2151
+ '}'
2152
+ ] . join ( '\n' ) ,
2153
+ parser : 'babel-eslint' ,
2154
+ errors : [ {
2155
+ message : 'propType "bar" is not required, but has no corresponding defaultProp declaration.'
2156
+ } ]
2157
+ } ,
2158
+ {
2159
+ code : [
2160
+ 'type HelloProps = {' ,
2161
+ ' foo?: string,' ,
2162
+ ' bar?: string' ,
2163
+ '};' ,
2164
+
2165
+ 'class Hello extends Component<HelloProps> {' ,
2166
+
2167
+ ' render() {' ,
2168
+ ' return <div>Hello {this.props.foo}</div>;' ,
2169
+ ' }' ,
2170
+ '}'
2171
+ ] . join ( '\n' ) ,
2172
+ parser : 'babel-eslint' ,
2173
+ errors : [ {
2174
+ message : 'propType "foo" is not required, but has no corresponding defaultProp declaration.'
2175
+ } , {
2176
+ message : 'propType "bar" is not required, but has no corresponding defaultProp declaration.'
2177
+ } ]
2009
2178
}
2010
2179
]
2011
2180
} ) ;
0 commit comments