严格的空检查

默认情况下,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);