三块面板:TS 源码 / 写死的 tsc 报错样本(非现场运行)/ 可点跑的等价 JS。核心看 any 与 unknown 的分工。
function report(v: unknown) {
v.toUpperCase() // ✗ unknown 上什么都不许直接做
const s: string = v // ✗ unknown 不能直接赋给 string
if (typeof v === 'string') {
return v.length // ✓ 收窄后才能用
}
return 0
}
any 会给你的自由的反面。function loose(v: any) {
return v.whatever.youWant // 合法!any 上不检查任何成员
}