prettier/tests/flow/getters_and_setters_enabled/class.js

59 lines
2.0 KiB
JavaScript

/**
* @flow
*/
var z: number = 123;
class Foo {
get goodGetterNoAnnotation() { return 4; }
get goodGetterWithAnnotation(): number { return 4; }
set goodSetterNoAnnotation(x) { z = x; }
set goodSetterWithAnnotation(x: number) { z = x; }
get propWithMatchingGetterAndSetter(): number { return 4; }
set propWithMatchingGetterAndSetter(x: number) { }
// The getter and setter need not have the same type - no error
get propWithSubtypingGetterAndSetter(): ?number { return 4; }
set propWithSubtypingGetterAndSetter(x: number) { }
// The getter and setter need not have the same type - no error
set propWithSubtypingGetterAndSetterReordered(x: number) { }
get propWithSubtypingGetterAndSetterReordered(): ?number { return 4; }
get propWithMismatchingGetterAndSetter(): number { return 4; }
set propWithMismatchingGetterAndSetter(x: string) { } // doesn't match getter (OK)
propOverriddenWithGetter: number;
get propOverriddenWithGetter() { return "hello"; }
propOverriddenWithSetter: number;
set propOverriddenWithSetter(x: string) { }
set [z](x: string) {}
get [z](): string { return string; }
};
var foo = new Foo();
// Test getting properties with getters
var testGetterNoError1: number = foo.goodGetterNoAnnotation;
var testGetterNoError2: number = foo.goodGetterWithAnnotation;
var testGetterWithError1: string = foo.goodGetterNoAnnotation; // Error number ~> string
var testGetterWithError2: string = foo.goodGetterWithAnnotation; // Error number ~> string
// Test setting properties with getters
foo.goodSetterNoAnnotation = 123;
foo.goodSetterWithAnnotation = 123;
// TODO: Why does no annotation mean no error?
foo.goodSetterNoAnnotation = "hello"; // Error string ~> number
foo.goodSetterWithAnnotation = "hello"; // Error string ~> number
var testSubtypingGetterAndSetter: number = foo.propWithSubtypingGetterAndSetter; // Error ?number ~> number
var testPropOverridenWithGetter: number = foo.propOverriddenWithGetter; // Error string ~> number
foo.propOverriddenWithSetter = 123; // Error number ~> string