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
|
// @strict: true
// @noEmit: true
// @noUncheckedIndexedAccess: true
declare function invariant(condition: boolean): asserts condition;
function f1(obj: Record<string, string>) {
invariant("test" in obj);
return obj.test; // string
}
function f2(obj: Record<string, string>) {
if ("test" in obj) {
return obj.test; // string
}
return "default";
}
function f3(obj: Record<string, string>) {
obj.test; // string | undefined
if ("test" in obj) {
obj.test; // string
}
else {
obj.test; // undefined
}
}
function f4(obj: Record<string, string>) {
obj.test; // string | undefined
if (obj.hasOwnProperty("test")) {
obj.test; // string
}
else {
obj.test; // undefined
}
}
|