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
|
=== tests/cases/compiler/inKeywordNarrowingWithNoUncheckedIndexedAccess.ts ===
declare function invariant(condition: boolean): asserts condition;
>invariant : (condition: boolean) => asserts condition
>condition : boolean
function f1(obj: Record<string, string>) {
>f1 : (obj: Record<string, string>) => string
>obj : Record<string, string>
invariant("test" in obj);
>invariant("test" in obj) : void
>invariant : (condition: boolean) => asserts condition
>"test" in obj : boolean
>"test" : "test"
>obj : Record<string, string>
return obj.test; // string
>obj.test : string
>obj : Record<string, string>
>test : string
}
function f2(obj: Record<string, string>) {
>f2 : (obj: Record<string, string>) => string
>obj : Record<string, string>
if ("test" in obj) {
>"test" in obj : boolean
>"test" : "test"
>obj : Record<string, string>
return obj.test; // string
>obj.test : string
>obj : Record<string, string>
>test : string
}
return "default";
>"default" : "default"
}
function f3(obj: Record<string, string>) {
>f3 : (obj: Record<string, string>) => void
>obj : Record<string, string>
obj.test; // string | undefined
>obj.test : string | undefined
>obj : Record<string, string>
>test : string | undefined
if ("test" in obj) {
>"test" in obj : boolean
>"test" : "test"
>obj : Record<string, string>
obj.test; // string
>obj.test : string
>obj : Record<string, string>
>test : string
}
else {
obj.test; // undefined
>obj.test : undefined
>obj : Record<string, string>
>test : undefined
}
}
function f4(obj: Record<string, string>) {
>f4 : (obj: Record<string, string>) => void
>obj : Record<string, string>
obj.test; // string | undefined
>obj.test : string | undefined
>obj : Record<string, string>
>test : string | undefined
if (obj.hasOwnProperty("test")) {
>obj.hasOwnProperty("test") : boolean
>obj.hasOwnProperty : (v: PropertyKey) => boolean
>obj : Record<string, string>
>hasOwnProperty : (v: PropertyKey) => boolean
>"test" : "test"
obj.test; // string
>obj.test : string
>obj : Record<string, string>
>test : string
}
else {
obj.test; // undefined
>obj.test : undefined
>obj : Record<string, string>
>test : undefined
}
}
|