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

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.

主站蜘蛛池模板: 青田县| 榆社县| 紫阳县| 竹北市| 巴林左旗| 东至县| 肥城市| 齐河县| 阿瓦提县| 武隆县| 花莲市| 上思县| 德安县| 林西县| 江阴市| 尼勒克县| 遵义县| 淮北市| 同仁县| 湘乡市| 新乐市| 东源县| 牙克石市| 新野县| 竹北市| 错那县| 淮北市| 大余县| 延安市| 青阳县| 莒南县| 防城港市| 明星| 揭东县| 黔西县| 赞皇县| 塔河县| 高唐县| 安阳县| 隆安县| 灵丘县|