@@ -958,6 +958,69 @@ ruleTester.run('prop-types', rule, {
958
958
'}'
959
959
] . join ( '\n' ) ,
960
960
parser : 'babel-eslint'
961
+ } , {
962
+ code : [
963
+ 'type Person = {name: {firstname: string;}};' ,
964
+ 'type Props = {people: Person[]|Person;};' ,
965
+ 'class Hello extends React.Component {' ,
966
+ ' props: Props;' ,
967
+ ' render () {' ,
968
+ ' var names = [];' ,
969
+ ' if (Array.isArray(this.props.people)) {' ,
970
+ ' for (var i = 0; i < this.props.people.length; i++) {' ,
971
+ ' names.push(this.props.people[i].name.firstname);' ,
972
+ ' }' ,
973
+ ' } else {' ,
974
+ ' names.push(this.props.people.name.firstname);' ,
975
+ ' }' ,
976
+ ' return <div>Hello {names.join(' , ')}</div>;' ,
977
+ ' }' ,
978
+ '}'
979
+ ] . join ( '\n' ) ,
980
+ parser : 'babel-eslint'
981
+ } , {
982
+ code : [
983
+ 'type Props = {ok: string | boolean;};' ,
984
+ 'class Hello extends React.Component {' ,
985
+ ' props: Props;' ,
986
+ ' render () {' ,
987
+ ' return <div>Hello {this.props.ok}</div>;' ,
988
+ ' }' ,
989
+ '}'
990
+ ] . join ( '\n' ) ,
991
+ parser : 'babel-eslint'
992
+ } , {
993
+ code : [
994
+ 'type Props = {result: {ok: string | boolean;}|{ok: number | Array}};' ,
995
+ 'class Hello extends React.Component {' ,
996
+ ' props: Props;' ,
997
+ ' render () {' ,
998
+ ' return <div>Hello {this.props.result.ok}</div>;' ,
999
+ ' }' ,
1000
+ '}'
1001
+ ] . join ( '\n' ) ,
1002
+ parser : 'babel-eslint'
1003
+ } , {
1004
+ code : [
1005
+ 'type Props = {result?: {ok?: ?string | boolean;}|{ok?: ?number | Array}};' ,
1006
+ 'class Hello extends React.Component {' ,
1007
+ ' props: Props;' ,
1008
+ ' render () {' ,
1009
+ ' return <div>Hello {this.props.result.ok}</div>;' ,
1010
+ ' }' ,
1011
+ '}'
1012
+ ] . join ( '\n' ) ,
1013
+ parser : 'babel-eslint'
1014
+ } , {
1015
+ code : [
1016
+ 'class Hello extends React.Component {' ,
1017
+ ' props = {a: 123};' ,
1018
+ ' render () {' ,
1019
+ ' return <div>Hello</div>;' ,
1020
+ ' }' ,
1021
+ '}'
1022
+ ] . join ( '\n' ) ,
1023
+ parser : 'babel-eslint'
961
1024
}
962
1025
] ,
963
1026
@@ -1718,6 +1781,20 @@ ruleTester.run('prop-types', rule, {
1718
1781
errors : [
1719
1782
{ message : '\'people[].name.lastname\' is missing in props validation' }
1720
1783
]
1784
+ } , {
1785
+ code : [
1786
+ 'type Props = {result?: {ok: string | boolean;}|{ok: number | Array}};' ,
1787
+ 'class Hello extends React.Component {' ,
1788
+ ' props: Props;' ,
1789
+ ' render () {' ,
1790
+ ' return <div>Hello {this.props.result.notok}</div>;' ,
1791
+ ' }' ,
1792
+ '}'
1793
+ ] . join ( '\n' ) ,
1794
+ parser : 'babel-eslint' ,
1795
+ errors : [
1796
+ { message : '\'result.notok\' is missing in props validation' }
1797
+ ]
1721
1798
}
1722
1799
]
1723
1800
} ) ;
0 commit comments