MST

星途 面试题库

面试题:TypeScript中unknown类型的类型缩小

在TypeScript里,当一个变量被声明为unknown类型,如何安全地对其进行类型缩小以便调用特定类型的方法或属性?请通过代码展示至少两种不同的类型缩小方式,并解释每种方式的原理。
12.7万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

方式一:使用 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);
    }
}