/* @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` } });