窄(字面量类型 / 更精确)
- 含义:保留更具体的类型信息(“它就是这个值”)。
- 例子:
- 'ok' 还是 'ok'
- 1 还是 1
const s = 'ok' // s: 'ok'(更窄、更精确)
const n = 1 // n: 1
为什么 const 更窄:因为 const 不能改值,TS 就敢把它推得更精确。
补充:“运行中窄化”
当一个变量是联合类型时,通过判断把它“缩小到某一支”,也叫类型收窄(narrowing):
function f(x: string | number) {
if (typeof x === 'string') {
// 这里 x 被收窄成 string
x.toUpperCase()
} else {
// 这里 x 被收窄成 number
x.toFixed(2)
}
}
一句话总结
- 宽化:更通用('a' → string)
- 窄(字面量):更精确('a' → 'a')
- 收窄:在代码分支里把联合类型缩小(string | number → string)