面试题答案
一键面试function printValue(value: string | number) {
if (typeof value ==='string') {
console.log(value.length);
} else {
console.log(value * value);
}
}
类型守卫细化联合类型的解释
- 初始联合类型:
value
的类型是string | number
,表示它可能是string
类型或者number
类型。 - 类型守卫:在
printValue
函数中,使用typeof value ==='string'
作为类型守卫。typeof
是 TypeScript 内置的类型守卫,它可以在运行时检查变量的类型。 - 细化类型:当
typeof value ==='string'
为true
时,TypeScript 能够在这个if
代码块内确定value
的类型为string
,这样就可以安全地访问value.length
。同理,在else
代码块中,TypeScript 确定value
的类型为number
,可以执行value * value
操作。通过这种方式,类型守卫在函数执行过程中根据运行时的条件,将联合类型细化为具体的类型,从而避免类型错误。