Typescript Typeguard布尔值导致永不

时间:2019-10-19 00:07:41

标签: typescript

我有一个变量topLeft,它是一个布尔值,它的类型可以为numberbooleantopLeft将变为一个数字,如果已经是一个数字,则将其增加一个。我有一个将topLeft转换为数字的类型保护,如果它是布尔值。但是在else语句中,该变量的结果为never类型。

type BoxCell = number | boolean;
let topLeft: BoxCell = true;

if (typeof topLeft === 'boolean') {
  topLeft = 1;
} else {
  topLeft += 1; // <--- Type 'number' is not assignable to type 'never'.ts(2322)
}

topLeft在代码示例中是一个固定值,但是我正在处理的涉及变量的值可以是布尔值或数字。

tsconfig.json

{
  "compilerOptions": {
    "target": "es2018",
    "module": "commonjs",
    "sourceMap": true /* Generates corresponding '.map' file. */,
    "outDir": "./dist" /* Redirect output structure to the directory. */,
    "strict": true /* Enable all strict type-checking options. */,
    "esModuleInterop": true
  }
}

1 个答案:

答案 0 :(得分:1)

有一个open issue。您可以改用二进制中缀加法运算符来解决此问题:topLeft = topLeft + 1

type BoxCell = number | boolean;
let topLeft: BoxCell = true;

if (typeof topLeft === 'boolean') {
  topLeft = 1;
} else {
  topLeft = topLeft + 1;  // <- no error
}