3.9 āĻāύāύā§āύ āĻāĻžāĻāĻĒ āĻāĻŦāĻ āύā§āĻāĻžāϰ āĻāĻžāĻāĻĒ
āĻāĻžāĻāĻĒāϏā§āĻā§āϰāĻŋāĻĒā§āĻā§ “unknown” āĻāĻŦāĻ “never” āĻĻā§āĻāĻŋ āĻāύāϏā§āĻĒā§āĻ āϝāĻž āĻā§āĻĄā§āϰ āύāĻŋāϰāĻžāĻĒāϤā§āϤāĻž āĻ āĻāĻžāĻāĻĒ āϏā§āĻĢāĻāĻŋ āĻŦāĻāĻžā§ āϰāĻžāĻāϤ⧠āϏāĻšāĻžāϝāĻŧāϤāĻž āĻāϰ⧠āϝā§āύ āϰāĻžāύāĻāĻžāĻāĻŽā§ āϏāĻŽā§āĻāĻžāĻŦā§āϝ āĻā§āύ āĻāϰāϰ āĻāĻŽāϰāĻž āĻāĻā§ āĻĨā§āĻā§ āĻā§āĻŋā§ā§ āĻāϞāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤Â Â
āĻāύāύā§āύ āĻāĻžāĻāĻĒÂ
âunknownâ āĻāĻžāĻāĻĒāĻā§ âanyâ āĻāĻžāĻāĻĒā§āϰ āĻĒā§āϰāϤāĻŋāϰā§āĻĒ āĻŦāϞāĻž āϝāĻžā§āĨ¤ āĻāĻā§āĻ āĻāĻžāĻāĻĒāϏā§āĻā§āϰāĻŋāĻĒā§āĻā§āϰ âuniversal supertypeâ. āĻ āϰā§āĻĨāĻžā§ āĻāĻžāĻāĻĒāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻāϰ āϏāĻāϞ āĻāĻžāĻāĻĒ âanyâ āĻ āĻĨāĻŦāĻž âunknownâ āĻāĻžāĻāĻĒā§ āĻāϏāĻžāĻāύ āĻāϰāĻž āϝāĻžā§āĨ¤ āϤāĻŦā§ āĻĒāĻžāϰā§āĻĨāĻā§āϝ āĻāĻž āĻšāϞ āĻāĻžāĻāĻĒ āĻāϏāĻžāϰāĻļāύ āĻāĻžā§āĻžāĻ âanyâ āĻāĻžāĻāĻĒāĻā§ āϝ⧠āĻā§āύ āĻāĻžāĻāĻĒā§ āĻāϏāĻžāĻāύ āĻāϰāĻž āϝāĻžā§, āĻāĻŋāύā§āϤ⧠âunknownâ āĻāĻžāĻāĻĒāĻā§ âanyâ āĻ āĻĨāĻŦāĻž âunknownâ āĻāĻžāĻāĻĒ āĻāĻžā§āĻž āĻ āύā§āϝ āĻāĻžāĻāĻĒā§ āĻāϏāĻžāĻāύ āĻāϰāĻž āϝāĻžā§ āύāĻžāĨ¤Â
āĻāĻžāĻāĻĒ āĻāϏāĻžāϰāĻļāύ āĻŦā§āϝāĻžāĻĒāĻžāϰāĻāĻž āĻšāĻā§āĻā§ āĻāĻŽā§āĻĒāĻžāĻāϞāĻžāϰāĻā§ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰ⧠āĻāĻžāĻāĻĒ āĻŦāϞ⧠āĻĻā§ā§āĻžāĨ¤ āĻ āϰā§āĻĨāĻžā§ âunknownâ āĻāĻžāĻāĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧠āĻāĻŽāĻžāĻĻā§āϰ āĻāĻā§āϏāĻĒā§āϞāĻŋāϏāĻŋāĻ āĻŦāĻž āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻšāϤ⧠āĻšā§āĨ¤ āϝā§āĻŽāύāĻÂ
let exampleUnknown:unknown = "Hello World!";
let exampleString:string = exampleUnknown;
// Type 'unknown' is not assignable to type 'string'.
exampleUnknown.toLowerCase()
// 'exampleUnknown' is of type 'unknown'.
āĻāĻāĻžāύ⧠āϞāĻā§āώā§āϝ āĻāϰā§āύ unknown āĻāĻžāĻāĻĒā§āϰ āĻāĻāĻāĻŋ āĻā§āϝāĻžāϰāĻŋā§ā§āĻŦāϞ⧠string āĻā§āϝāĻžāϞ⧠āĻāϏāĻžāĻāύ āĻāϰāĻž āĻšāϞā§āĻ āĻ āύā§āϝ āĻāĻāĻāĻŋ string āĻāĻžāĻāĻĒā§āϰ āĻā§āϝāĻžāϰāĻŋā§ā§āĻŦāϞ⧠unknown āĻāĻžāĻāĻĒā§āϰ āĻā§āϝāĻžāϰāĻŋā§ā§āĻŦāϞāĻāĻŋ āĻāϏāĻžāĻāύ āĻāϰāĻž āϝāĻžāĻā§āĻā§ āύāĻžāĨ¤ āĻ āύā§āϝāĻĻāĻŋāĻā§ āĻāĻžāĻāĻĒāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻāϰ āĻā§āύ string āĻŽā§āĻĨāĻĄāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝāĻžāĻŦā§ āύāĻžāĨ¤ āϏā§āĻā§āώā§āϤā§āϰ⧠āĻāĻŽā§āĻĒāĻžāĻāϞāĻžāϰ āĻāĻŽāĻžāĻĻā§āϰ āĻāϰāϰ āĻĻāĻŋāĻā§āĻā§āĨ¤ āĻāĻāύ as āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϝāĻĻāĻŋ āĻāĻžāĻāĻĒ āϏā§āĻĒā§āϏāĻŋāĻĢāĻžāĻ āĻāϰ⧠āĻĻā§ā§āĻž āĻšā§ āϤāĻžāĻšāϞ⧠āĻāĻ āĻāϰāϰāĻāĻŋ āĻāϰ āĻĨāĻžāĻāĻŦā§ āύāĻžāĨ¤ āϝā§āĻŽāύāĻÂ
let exampleUnknown:unknown = "Hello World!";
let exampleString:string = exampleUnknown as string;
exampleString.toLowerCase() // "hello world!"
āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻāĻžāĻāĻĒ āĻāϏāĻžāϰāĻļāύ āĻāϰ āĻāĻĻāĻžāĻšāϰāĻŖāĨ¤ āĻ āύā§āϝāĻĻāĻŋāĻā§ āĻāĻžāĻāĻĒ āĻā§āĻāĻŋāĻāĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝāĻžā§ āĻāĻāĻžāĻŦā§,Â
let exampleUnknown:unknown = "Hello World!";
if(typeof exampleUnknown === "string"){
exampleUnknown.toLowerCase()
}
āϤāĻŦā§ āĻāĻžāĻāĻĒ āĻā§āĻāĻŋāĻ āĻāϰ āϝā§āĻā§āύ⧠usecase-āĻ āĻāĻŽāĻžāĻĻā§āϰ āĻŦā§āϞāĻ āϏā§āĻā§āĻĒ āĻāϰ āĻŦā§āϝāĻžāĻĒāĻžāϰāĻāĻŋ āĻŽāĻžāĻĨāĻžā§ āϰāĻžāĻāϤ⧠āĻšāĻŦā§āĨ¤Â
unknown āĻāĻžāĻāĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧠āĻāĻ āϰā§āϏā§āĻā§āϰāĻŋāĻāĻļāύ āĻŦāĻž āĻŦāĻžāϧāĻž āύāĻŋā§āĻŽāĻā§āϞā§āĻ āĻāĻāĻŋāĻā§ āĻāĻžāĻāĻĒ āϏā§āĻĢ āĻāϰ⧠āϤā§āϞā§āĨ¤ āĻā§āĻĄāĻŦā§āĻā§ āϝāĻĻāĻŋ āĻāĻŽāύ āĻā§āύ āĻŽā§āĻĨāĻĄ āĻĨāĻžāĻā§ āϝā§āĻāĻŋ āĻā§āĻŦāϞ āĻāĻāĻāĻŋ āĻĄāĻžāĻāĻžāĻāĻžāĻāĻĒā§āϰ āĻĢāĻžāĻāĻļāύāĻžāϞāĻŋāĻāĻŋ āύāĻŋā§ā§ āĻāĻžāĻ āĻāϰāĻŦā§, āĻāĻŋāύā§āϤ⧠āĻā§āϞāĻŦāĻļāϤ āĻ āύā§āϝ āĻāĻāĻāĻŋ āĻāĻžāĻāĻĒā§āϰ āĻĄā§āĻāĻž āĻāϰā§āĻā§āĻŽā§āύā§āĻā§ āĻĒāĻžāϏ āĻāϰāĻž āĻšā§ā§āĻā§ āϏā§āĻā§āώā§āϤā§āϰ⧠āĻĒā§āϰāĻĨāĻŽā§ āĻāĻŽā§āĻĒāĻžāĻāϞāĻžāϰ āĻāϰāϰ āύāĻž āĻĻā§āĻāĻžāϞā§āĻ āϰāĻžāύāĻāĻžāĻāĻŽā§ āĻā§āĻĄ āĻāĻŋāύā§āϤ⧠āĻāĻžāĻ āĻāϰāĻŦā§ āύāĻžāĨ¤ āĻāĻāĻŋ āĻā§āĻĄ āĻĄāĻŋāĻŦāĻžāĻāĻŋāĻ āĻāϰ āĻā§āώā§āϤā§āϰ⧠āĻā§āĻŦ āĻŦā§ āĻāĻāĻāĻŋ āϏāĻŽāϏā§āϝāĻžāĨ¤Â unknown āĻāĻžāĻāĻĒā§āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧠āĻ āϧāϰā§āύā§āϰ āϏāĻŽāϏā§āϝāĻžāĻā§āϞ⧠āĻĒā§āϰā§āĻŦā§āĻ āĻā§āĻŋā§ā§ āϝāĻžāĻā§āĻž āϝāĻžā§āĨ¤Â
āύā§āĻāĻžāϰ āĻāĻžāĻāĻĒ Â
âneverâ āĻāĻžāĻāĻĒ āĻāĻŽāύ āĻāĻāĻāĻŋ āĻāĻžāĻāĻĒ āύāĻŋāϰā§āĻĻā§āĻļ āĻāϰ⧠āϝ⧠āĻāĻžāĻāĻĒā§ āĻā§āύ āĻĒāϏāĻŋāĻŦāϞ āĻā§āϝāĻžāϞ⧠āĻŦāĻž āĻŽāĻžāύ āĻšāϤ⧠āĻĒāĻžāϰ⧠āύāĻžāĨ¤ āĨ¤ āϝā§āĻŽāύ āĻšāϤ⧠āĻĒāĻžāϰ⧠āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāύ āϝāĻž āĻāĻāύāĻ āĻļā§āώ āĻĒāϰā§āϝāύā§āϤ āϝāĻžāĻŦā§ āύāĻž āĻŦāĻž āϏāĻŦ āϏāĻŽā§ āĻāϰāϰ āĻĨā§āϰ⧠āĻāϰāĻŦā§, āϤāĻāύ āϰāĻŋāĻāĻžāϰā§āύ āĻāĻžāĻāĻĒ āĻšāĻŋāϏā§āĻŦā§ “never” āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšā§āĨ¤ āĻāĻŋāύā§āϤ⧠āĻā§āύ? āĻ āĻĨāĻŦāĻž āĻāϰāĻāĻŽ āĻĢāĻžāĻāĻļāύ⧠never āĻāĻžāĻāĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ āύāĻž āĻāϰāϞ⧠āĻāĻŋ āĻšāϤ⧠āĻĒāĻžāϰā§?
āĻāĻŽāϰāĻž āύā§āĻāĻžāϰ āĻāĻžāĻāĻĒāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāϏāϞ⧠unreachable āĻā§āĻĄ āĻāύā§āĻĄāĻŋāĻā§āĻ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤ āϧāϰāĻž āϝāĻžāĻ āĻāĻŽāύ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻļāύ āϰā§ā§āĻā§ āϝāĻž āϏāĻŦ āϏāĻŽā§ āĻāϰāϰ āĻĨā§āϰ⧠āĻāϰāĻŦā§āĨ¤ āύāĻŋā§āĻŽ āĻ āύā§āϝāĻžā§ā§ āĻāĻŽāĻžāĻĻā§āϰ āĻāĻāĻžāύ⧠never āĻāĻžāĻāĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻāĻāĻŋāϤāĨ¤ āĻāĻŽāϰāĻž āϝāĻĻāĻŋ never āĻŦā§āϝāĻŦāĻšāĻžāϰ āύāĻž āĻāϰ⧠any āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŋ āϤāĻžāĻšāϞā§āĻ āĻāϰāϰ āĻĨā§āϰ⧠āĻāϰāĻŦā§ āĻāĻŦāĻ āĻĢāĻžāĻāĻļāύ āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻļāύ halt āĻāϰāĻŦā§āĨ¤ āĻāĻŋāύā§āϤ⧠āĻĒāϰāĻŦāϰā§āϤ⧠āĻā§āύ āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻā§āĻŦāϞ āĻā§āĻĄ āĻĨāĻžāĻāϞ⧠āϏā§āĻāĻŋ āĻāϰāϰ āĻĻā§āĻāĻžāĻŦā§ āύāĻžāĨ¤ āĻ āϰā§āĻĨāĻžā§ āĻāĻŽāϰāĻž āĻŦā§āĻāϤā§āĻ āĻĒāĻžāϰāĻŦā§ āύāĻž āϝ⧠āĻā§āĻĄāĻŦā§āĻā§ āĻāĻŋāĻā§ āĻāύāϰāĻŋāĻā§āĻŦāϞ āĻā§āĻĄ āϰā§ā§āĻā§ āϝāĻž āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻ āĻšāĻŦā§ āύāĻžāĨ¤ āĻšā§āϤ⧠āĻā§āϞāĻŦāĻļāϤ āĻā§āύ āĻā§āϰā§āϤā§āĻŦāĻĒā§āϰā§āĻŖ āĻĢāĻžāĻāĻļāύ āĻĄāĻŋāĻā§āϞāĻžāϰ āĻāϰāĻž āĻĨāĻžāĻāϤ⧠āĻĒāĻžāϰā§āĨ¤ āϝā§āĻŽāύāĻÂ
function throwError(error: string): any {
throw new Error(error);
}
throwError('Error occurred!'); // function halts here
// These lines are not executing but also not showing any error
veryImportantFunction();
console.log('Hello World!');
āĻāĻāύ āĻāĻŽāϰāĻž āϝāĻĻāĻŋ never āĻāĻžāĻāĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŋāĻÂ
function throwError(error: string): never {
throw new Error(error);
}
throwError('throw');
// Unreachable code detected.
veryImportantFunction();
console.log('Hello World!')
āĻāĻā§āώā§āϤā§āϰ⧠āĻāĻžāĻāĻĒāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻāĻŽā§āĻĒāĻžāĻāϞāĻžāϰ āĻāĻŽāĻžāĻĻā§āϰ āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻļāύā§āϰ āĻĒā§āϰā§āĻŦā§āĻ āĻāϰāϰ āĻĻā§āĻāĻžāĻŦā§āĨ¤ never āĻāĻžāĻāĻĒā§āϰ āĻāĻ āύāĻŋā§āĻŽāĻā§āϞ⧠āĻāĻŽāĻžāĻĻā§āϰ āĻāϰāϰ āĻĢā§āϰāĻŋ āĻā§āĻĄ āϞāĻŋāĻāϤ⧠āϏāĻžāĻšāĻžāϝā§āϝ āĻāϰā§, āĻĄāĻŋāĻŦāĻžāĻāĻŋāĻ āϏāĻšāĻ āĻāϰā§, āĻāĻŦāĻ āϏāĻŽā§āĻāĻŦā§āϝ āϰāĻžāύāĻāĻžāĻāĻŽ āĻāϰāϰ āĻāĻŽāϰāĻž āĻā§āĻŋā§ā§ āĻāϞāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤Â
āĻ āύā§āϝāĻĻāĻŋāĻā§ āĻā§āĻĄā§ āĻā§āύ āĻāύāĻĢāĻŋāύāĻŋāĻ āϞā§āĻĒ āĻĨāĻžāĻāϞā§, āĻāĻāĻāϰāĻāĻŽ āĻāĻžāĻŦā§ āĻāĻŽāĻžāĻĻā§āϰ āύā§āĻāĻžāϰ āĻāĻžāĻāĻĒ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻšāĻŦā§, āύāϤā§āĻŦāĻž āϰāĻžāύāĻāĻžāĻāĻŽā§ explicitly āĻā§āĻĄ break āύāĻž āĻāϰāĻž āĻĒāϰā§āϝāύā§āϤ āϞā§āĻĒ āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻļāύā§āĻ āĻĒā§ā§ āĻĨāĻžāĻāĻŦā§āĨ¤ āĻāĻŦāĻ āĻĒāϰāĻŦāϰā§āϤ⧠āĻā§āύ āĻā§āĻĄ āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻ āĻā§āύ āĻšāĻā§āĻā§ āύāĻž āĻāĻŽāϰāĻž āϤāĻžāϰ āϝāĻĨāĻžāϝāĻĨ āĻāϰāϰ āĻŽā§āϏā§āĻ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻŦā§ āύāĻžāĨ¤
function processEvent(): never {
while(true){
// Read an event from queue
}
}
processEvent();
// Unreachable code detected.
veryImportantFunction();
console.log('Hello World!')
āϤāĻŦā§ āĻāĻāĻāĻŋ āĻŦā§āϝāĻžāĻĒāĻžāϰ⧠āĻā§ā§āĻžāϞ āϰāĻžāĻāϤ⧠āĻšāĻŦā§ tsconfig āĻĢāĻžāĻāϞ⧠“allowUnreachableCode”: true āĻĨāĻžāĻāĻž āϝāĻžāĻŦā§ āύāĻžāĨ¤ āϤāĻžāĻšāϞ⧠āĻāĻžāĻāĻĒāϏā§āĻā§āϰāĻŋāĻĒā§āĻ āĻāĻŽā§āĻĒāĻžāĻāϞāĻžāϰ āĻāϰāϰ āĻŽā§āϏā§āĻāĻāĻŋ āĻā§āĻŋā§ā§ āϝāĻžāĻŦā§āĨ¤Â Â