1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
=== tests/cases/compiler/divergentAccessorsTypes6.ts ===
export {};
interface Element {
get style(): CSSStyleDeclaration;
>style : CSSStyleDeclaration
set style(cssText: string);
>style : CSSStyleDeclaration
>cssText : string
}
declare const element: Element;
>element : Element
element.style = "color: red";
>element.style = "color: red" : "color: red"
>element.style : string
>element : Element
>style : string
>"color: red" : "color: red"
element.style.animationTimingFunction;
>element.style.animationTimingFunction : string
>element.style : CSSStyleDeclaration
>element : Element
>style : CSSStyleDeclaration
>animationTimingFunction : string
element.style = element.style; // error
>element.style = element.style : CSSStyleDeclaration
>element.style : string
>element : Element
>style : string
>element.style : CSSStyleDeclaration
>element : Element
>style : CSSStyleDeclaration
// Now that we don't check for getter/setter assignability, we should
// ensure the setter annotation is actually checked even if it's never observed.
type Fail<T extends never> = T;
>Fail : T
interface I1 {
get x(): number;
>x : number
set x(value: Fail<string>);
>x : number
>value : string
}
const o1 = {
>o1 : { x: number; }
>{ get x(): number { return 0; }, set x(value: Fail<string>) {}} : { x: number; }
get x(): number { return 0; },
>x : number
>0 : 0
set x(value: Fail<string>) {}
>x : number
>value : string
}
// A setter annotation still implies the getter return type.
const o2 = {
>o2 : { p1: string; p2: number; }
>{ get p1() { return 0; }, // error - no annotation means type is implied from the setter annotation set p1(value: string) {}, get p2(): number { return 0; }, // ok - explicit annotation set p2(value: string) {},} : { p1: string; p2: number; }
get p1() { return 0; }, // error - no annotation means type is implied from the setter annotation
>p1 : string
>0 : 0
set p1(value: string) {},
>p1 : string
>value : string
get p2(): number { return 0; }, // ok - explicit annotation
>p2 : number
>0 : 0
set p2(value: string) {},
>p2 : number
>value : string
};
|