严格的空检查
默认情况下,TypeScript 中的所有类型都允许 null
:
function getId(x: Element) {
return x.id;
}
getId(null); // TypeScript does not complain, but this is a runtime error.
TypeScript 2.0 增加了对严格空检查的支持。如果在运行 tsc
时设置 --strictNullChecks
(或在 tsconfig.json
中设置此标志),则类型不再允许 null
:
function getId(x: Element) {
return x.id;
}
getId(null); // error: Argument of type 'null' is not assignable to parameter of type 'Element'.
你必须明确允许 null
值:
function getId(x: Element|null) {
return x.id; // error TS2531: Object is possibly 'null'.
}
getId(null);
使用适当的保护,代码类型检查并正确运行:
function getId(x: Element|null) {
if (x) {
return x.id; // In this branch, x's type is Element
} else {
return null; // In this branch, x's type is null.
}
}
getId(null);