在TypeScript里用satisfies和as const处理配置对象时,怎样避免类型拓宽和运行时错误
写TS项目时经常遇到一种情况:定义一个配置对象,既希望字面量类型被保留,又希望整体结构受接口约束。比如路由表、主题变量、状态映射。直接写 const config = { ... } 会导致属性被拓宽成 string 或 number,传给只接受字面量联合类型的函数会报错。用 : SomeType 注解又会把字面量信息擦掉,拿不到精确的 key。as const 虽然能冻结字面量,但会和接口约束冲突,特别是当接口里有可选字段或联合类型时。TypeScript 4.9 加入的 satisfies 操作符正好补上这个缺口,它既做类型检查又保留推断出的窄类型。下面用几个实际场景说明怎么组合使用,以及...