/* @flow */
class A {}
class B extends A {}
class C extends B {}
var React = require('react');
var Example = React.createClass({
propTypes: {
x: React.PropTypes.instanceOf(B),
}
});
(); // error: A ~> B
(); // OK
(); // OK (C ~> B)
(); // error: string ~> B
class Poly {x:T}
var PolyExample = React.createClass({
propTypes: {
x: React.PropTypes.instanceOf(Poly).isRequired,
},
m() {
(this.props.x.x: empty); // OK, T instantiated to `any`
}
});
// Different instantiations don't interact
()} />); // OK
()} />); // OK
class PolyDefault {x:T}
var PolyDefaultExample = React.createClass({
propTypes: {
x: React.PropTypes.instanceOf(PolyDefault).isRequired,
},
m() {
(this.props.x.x: empty); // OK, T instantiated to `any`
}
});