MST

星途 面试题库

面试题:TypeScript中unknown与any的基础差异及示例

请简要阐述在TypeScript中unknown类型和any类型的主要区别,并分别给出一个使用场景的代码示例。
44.2万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

区别

  1. 类型安全性
    • any类型是完全类型宽松的,它可以绕过TypeScript的类型检查。在使用any类型时,编译器不会对其进行类型检查,这可能导致运行时错误。例如,你可以将any类型的值赋值给任何类型的变量,也可以调用不存在的属性或方法而不会在编译时报错。
    • unknown类型是类型安全的。它表示值可以是任何类型,但在对其进行操作之前,必须先进行类型检查或断言。这有助于在编译时捕获潜在的类型错误。
  2. 赋值兼容性
    • 任何类型的值都可以赋值给any类型的变量,同时any类型的值也可以赋值给任何类型的变量。
    • 任何类型的值都可以赋值给unknown类型的变量,但unknown类型的值不能直接赋值给其他类型的变量,除非进行类型检查或断言。

使用场景代码示例

any类型示例

// 定义一个函数,参数为any类型
function logValueAny(value: any) {
    console.log(value.length); // 这里不会在编译时报错,即使value可能没有length属性
}

logValueAny('hello');
logValueAny(123); // 虽然123没有length属性,但这里编译不会报错,可能导致运行时错误

unknown类型示例

// 定义一个函数,参数为unknown类型
function logValueUnknown(value: unknown) {
    if (typeof value ==='string') {
        console.log(value.length); // 进行类型检查后,这里编译和运行都安全
    }
}

logValueUnknown('world');
logValueUnknown(456); // 这里不会执行console.log,因为类型检查不通过