MST

星途 面试题库

面试题:TypeScript中any与unknown类型在函数参数使用上的区别

请描述在TypeScript里,函数参数使用any类型和unknown类型时,在类型检查和使用方式上有哪些不同,并各举一个简单示例说明。
23.5万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

类型检查差异

  1. any类型:对any类型的值进行任何操作,TypeScript 编译器都不会报错。它绕过了类型检查,几乎等同于关闭了类型系统。
  2. unknown类型:不能对unknown类型的值进行任意操作,必须先进行类型缩小(type narrowing),比如类型断言、typeof检查、instanceof检查等,将其缩小到更具体的类型后才能安全使用。

使用方式示例

  1. any类型示例
function logAnyValue(value: any) {
    // 这里可以直接对value进行任意操作,编译器不会报错
    console.log(value.length); 
    console.log(value()); 
}

logAnyValue('hello'); 
logAnyValue(() => console.log('function')); 
  1. unknown类型示例
function logUnknownValue(value: unknown) {
    if (typeof value ==='string') {
        // 经过类型缩小后,可以安全使用string类型的属性和方法
        console.log(value.length); 
    } else if (typeof value === 'function') {
        (value as () => void)(); 
    }
}

logUnknownValue('world'); 
logUnknownValue(() => console.log('unknown function'));