编译器配置项-compilerOptions
类型检查相关配置项(二)
确定类型的可选属性 -exactOptionalPropertyTypes
可选属性为对象中可以有这个属性,也可以没有这个属性。当启用exactOptionalPropertyTypes
选项时, TypeScript将使用严格的校验规则处理可选属性,不管是类型中定义的,还是在接口中定义的(属性名称后跟着?
的为可选属性)。
在下边的示例中,接口定义了一个可选属性colorThemeOverride
,它的值为dark
或者light
。
interface UserDefaults {
// The absence of a value represents 'system'
colorThemeOverride?: "dark" | "light";
}
如果这个选项未启用,colorThemeOverride
可以设置为三个值:dark
、light
或者undefined
。
如果将值设置为undefined
,将导致大多数的JavaScript运行时检查属性是否存在时出现问题:检查结果将返回false
,但属性却是存在的。然而,这是不准确的,colorThemeOverride
的值为undefined
与没有colorThemeOverride
这个属性并不相同,特别是在需要不同处理方式时。
exactOptionalPropertyTypes
选项使TypeScript的可选属性真正的符合定义:
const settings = getUserSettings();
settings.colorThemeOverride = "dark";
settings.colorThemeOverride = "light";
// But not:
settings.colorThemeOverride = undefined;
当exactOptionalPropertyTypes: true
时,undefined
不能分配给只能是"dark" | "light"
的属性,除非将undefined
也添加到定义的值中,"dark" | "light" | undefined
。
禁止switch语句中的case分支存在Fallthrough行为-noFallthroughCasesInSwitch
报告错误当Switch语句中存在Fallthrough行为时报告。确保在Switch语句的每一个在非空case分支中都有break
、return
或者throw
,这意味着不会出现意外的fallthrough的case语句。
Fallthrough行为:当一个匹配到一个case分支后,如果该分支没有
break
语句,接下来的case
分支也将运行。
const a: number = 6;
switch (a) {
case 0:
// Fallthrough case in switch.
console.log("even");
case 1:
console.log("odd");
break;
}
网友评论