官术网_书友最值得收藏!

Never

The never type represents something that would never occur and is typically used to specify unreachable areas of code. Again, this doesn't exist in JavaScript.

Time for an example:

  1. Type the following code into the TypeScript playground:
function foreverTask(taskName: string): never {
while (true) {
console.log(`Doing ${taskName} over and over again ...`);
}
}

The function invokes an infinite loop and never returns, and so we have given it a type annotation of never. This is different to void because void means it will return, but with no value.

In the preceding example, we used a JavaScript template literal to construct the string to log to the console. Template literals are enclosed by back-ticks ( ``) and can include a JavaScript expression in curly braces prefixed with a dollar sign ( ${expression}). Template literals are great when we need to merge static text with variables.
  1. Let's change the foreverTask function to break out of the loop:
function foreverTask(taskName: string): never {
while (true) {
console.log(`Doing ${taskName} over and over again ...`);
break;
}
}

The TypeScript compiler quite rightly complains:

  1. Let's now remove the break statement and the never type annotation. If we hover over the foreverTask function name with our mouse, we see that TypeScript has inferred the type to be void, which is not what we want in this example:

The never type is useful in places where the code never returns. However, we will probably need to explicitly define the never type annotation because the TypeScript compiler isn't smart enough yet to infer that.

主站蜘蛛池模板: 玉山县| 扶绥县| 宜川县| 定边县| 巴彦淖尔市| 南阳市| 太仓市| 三江| 仁布县| 和平县| 山西省| 抚顺县| 台中县| 攀枝花市| 五河县| 洛南县| 通海县| 呼和浩特市| 永登县| 遵化市| 泗阳县| 安岳县| 康乐县| 屏东市| 伊春市| 怀宁县| 若羌县| 吴川市| 大竹县| 子洲县| 塔河县| 余江县| 绥宁县| 即墨市| 浦东新区| 仙居县| 海盐县| 彰化县| 绥芬河市| 泽普县| 克山县|