TypeScript 中让人头疼的 'as const' 与类型收窄陷阱:从一次线上 bug 说起
最近在维护一个数据看板项目时,遇到一个 TypeScript 类型报错,当时觉得明明逻辑没问题,编译却过不去。场景很简单:一个函数根据传入的字符串字面量决定返回不同的配置对象,但在 switch 分支里 TypeScript 死活不认已经收窄的类型,反而把整个联合类型都报出来。排查后发现根源在于 as const 的使用方式以及接口定义时没有正确保留字面量类型。这篇文章会从实际代码出发,梳理 as const 对推断的影响、类型收窄在哪些情况下会失效,以及如何用可辨识联合修复这类问题,顺带聊一下 satisfies 操作符在保持类型安全的同时避免过度断言。如果你也写过类似 const conf...