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 90 91 92 93 94 95 96 97 98 99 100
|
=== tests/cases/conformance/classes/members/instanceAndStaticMembers/typeOfThisInstanceMemberNarrowedWithLoopAntecedent.ts ===
// #31995
type State = {
>State : { type: "numberVariant"; data: number; } | { type: "stringVariant"; data: string; }
type: "numberVariant";
>type : "numberVariant"
data: number;
>data : number
} | {
type: "stringVariant";
>type : "stringVariant"
data: string;
>data : string
};
class SomeClass {
>SomeClass : SomeClass
state!: State;
>state : State
method() {
>method : () => void
while (0) { }
>0 : 0
this.state.data;
>this.state.data : string | number
>this.state : State
>this : this
>state : State
>data : string | number
if (this.state.type === "stringVariant") {
>this.state.type === "stringVariant" : boolean
>this.state.type : "numberVariant" | "stringVariant"
>this.state : State
>this : this
>state : State
>type : "numberVariant" | "stringVariant"
>"stringVariant" : "stringVariant"
const s: string = this.state.data;
>s : string
>this.state.data : string
>this.state : { type: "stringVariant"; data: string; }
>this : this
>state : { type: "stringVariant"; data: string; }
>data : string
}
}
}
class SomeClass2 {
>SomeClass2 : SomeClass2
state!: State;
>state : State
method() {
>method : () => void
const c = false;
>c : false
>false : false
while (c) { }
>c : false
if (this.state.type === "numberVariant") {
>this.state.type === "numberVariant" : boolean
>this.state.type : "numberVariant" | "stringVariant"
>this.state : State
>this : this
>state : State
>type : "numberVariant" | "stringVariant"
>"numberVariant" : "numberVariant"
this.state.data;
>this.state.data : number
>this.state : { type: "numberVariant"; data: number; }
>this : this
>state : { type: "numberVariant"; data: number; }
>data : number
}
let n: number = this.state?.data; // This should be an error
>n : number
>this.state?.data : string | number
>this.state : State
>this : this
>state : State
>data : string | number
}
}
|