21 lines
449 B
JavaScript
21 lines
449 B
JavaScript
// @flow
|
|
|
|
class Base {}
|
|
class Middle extends Base {}
|
|
class Child extends Middle {}
|
|
|
|
class C<T: Middle> {
|
|
meth(a: T): T {
|
|
return a;
|
|
}
|
|
}
|
|
|
|
// T is implicitly (bounded by) Middle in constructor call if not provided.
|
|
// Explicit type arg is required in annotation - here a wildcard captures it.
|
|
var a: C<*> = new C();
|
|
|
|
a.meth(new Middle());
|
|
a.meth(new Child());
|
|
a.meth(42); // Error: number ~> Middle
|
|
a.meth(new Base()); // Error: Base ~> Middle
|