面试题答案
一键面试方式一:使用 typeof
进行类型缩小
原理:typeof
操作符在运行时检查变量的类型,并返回一个表示其类型的字符串。通过 typeof
进行类型缩小,可以在条件判断中根据返回的字符串确定变量的具体类型,从而安全地调用特定类型的方法或属性。
function printLength(value: unknown) {
if (typeof value ==='string') {
console.log(value.length);
}
}
方式二:使用 instanceof
进行类型缩小
原理:instanceof
操作符用于检查一个对象是否是某个类的实例。当一个变量可能是某个类的实例时,通过 instanceof
可以缩小类型范围,进而调用该类的方法或属性。
class Animal {
speak() {
console.log('Animal speaks');
}
}
class Dog extends Animal {
bark() {
console.log('Dog barks');
}
}
function animalSound(animal: unknown) {
if (animal instanceof Dog) {
animal.bark();
} else if (animal instanceof Animal) {
animal.speak();
}
}
方式三:自定义类型保护函数
原理:自定义类型保护函数通过返回一个类型谓词来缩小变量的类型。类型谓词使用 parameterName is Type
的语法形式,其中 parameterName
是函数参数名,Type
是要缩小到的类型。
function isStringArray(value: unknown): value is string[] {
return Array.isArray(value) && value.every((item) => typeof item ==='string');
}
function printArrayLength(value: unknown) {
if (isStringArray(value)) {
console.log(value.length);
}
}