// *** before: ***
function assertIsString(val: unknown): void {
if (typeof val !== "string") {
throw new Error("Not a string!");
}
}
function process(val: unknown) {
assertIsString(val);
val.toUpperCase(); // <-Error: val всё ещё unknown для компилятора
}
// *** in version 3.7: ***
function assertIsStringTyped(val: unknown): asserts val is string {
if (typeof val !== "string") {
throw new Error("Not a string!");
}
}
function processTyped(val: unknown) {
assertIsStringTyped(val);
val.toUpperCase(); // OK: после вызова val сужен до string