59 lines
2.0 KiB
JavaScript
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
|