我有一个变量topLeft
,它是一个布尔值,它的类型可以为number
或boolean
。 topLeft
将变为一个数字,如果已经是一个数字,则将其增加一个。我有一个将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
}
}
答案 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
}