type User = { name?: string };
function show(u: User) {
  const name = u.name ?? '匿名';
  return name.toUpperCase();
}

打开严格模式后,读取对象可选属性赋值给字符串变量全部报类型错误,改一个冒一片。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。

原因不复杂,严格空值检查要求在使用前明确排除 undefined,类型系统不会自动推断。

这次卡住的地方就在「TypeScript 类型收窄」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。改完隔一天再看一次,当场正常不代表能稳住。

测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。

处理上按这个顺序:用可选链配合默认值;在分支里显式判断再使用;类型定义与真实数据结构对齐。

改完只确认一件事:编译不再报类型错误,运行时遇到缺字段也能走默认分支。

作者 9823189