跳到主要内容

严格模式与常见陷阱

strict: true 打开一组相关检查;理解它们能少踩「编译过、运行炸」的坑。

strict 族(节选)​

选项作用
strictNullChecksnull / undefined 不能随意赋给普通类型
strictFunctionTypes函数参数更严格的逆变检查
noImplicitAny推不出类型时禁止默默变 any
strictPropertyInitialization类属性必须在构造时初始化

新项目直接 strict: true;老项目可逐项打开。

常见陷阱​

1. any 传染

const data: any = JSON.parse(text);
data.foo.bar; // 全程无检查

改用 unknown + 校验 / schema(如 zod)再收窄。

2. 类型拓宽(widening)

let theme = "dark"; // string,不是 "dark"
theme = "light";

const themeConst = "dark"; // "dark"

需要字面量时用 as const 或显式字面量联合类型。

3. 断言掩盖错误

const user = raw as User; // 形状不对也会信

断言不验证字段;边界用校验函数。

4. 编译时 ≠ 运行时

接口、类型别名在运行时被擦除。不能 instanceof 一个 interface;需要的话用可辨识字段或校验函数。

要点​

  1. 新项目开 strict
  2. 堵住 any 入口
  3. 注意字面量拓宽
  4. 牢记类型会被擦除