prettier/tests/flow/getters_and_setters_enabled/variance.js

71 lines
1.3 KiB
JavaScript

/* @flow */
class A {}
class B extends A {}
class C extends B {}
declare var a: A;
declare var b: B;
declare var c: C;
class Base {
x: B;
+pos: B;
-neg: B;
get get(): B { return this.x };
set set(value: B): void { this.x = value };
get getset(): B { return this.x };
set getset(value: B): void { this.x = value };
}
(class extends Base {
// error: getter incompatible with read/write property
get x(): B { return b }
});
(class extends Base {
// error: setter incompatible with read/write property
set x(value: B): void {}
});
(class extends Base {
// ok: get/set co/contra with read/write property, resp.
get x(): C { return c }
set x(value: A): void {}
});
(class extends Base {
// error: setter incompatible with read-only property
set pos(value: B): void {}
});
(class extends Base {
// ok: getter covariant with read-only property
get pos(): C { return c }
});
(class extends Base {
// error: getter incompatible with write-only property
get neg(): B { return b }
});
(class extends Base {
// ok: setter contravariant with write-only property
set neg(value: A): void {}
});
(class extends Base {
// ok: read/write covariant with getter
get: C;
});
(class extends Base {
// ok: read/write contravariant with setter
set: A;
});
(class extends Base {
// ok: read/write invariant with get/set
getset: B;
});