MST

星途 面试题库

面试题:TypeScript中any与unknown类型在大型项目架构设计中的最佳实践及选型依据

在一个大型前端项目架构设计中,考虑到代码的可维护性、类型安全性以及开发效率,阐述在哪些场景下应优先选择any类型,哪些场景下应优先选择unknown类型,并结合实际项目经验说明做出这些选型的依据。
13.8万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

any类型适用场景及依据

  1. 第三方库类型不明确时
    • 场景:在引入一些老旧或文档不完善的第三方库时,比如某些历史遗留的前端图表库,其导出的函数和对象没有明确的类型定义。
    • 依据:为了能够快速使用这些库的功能,避免花费大量时间去反向推导其准确类型,使用any类型可以让代码顺利编译运行。例如,项目中引入了一个旧的地图插件,该插件没有提供类型声明文件,使用any可以直接调用插件的方法const map = new (window as any).MapPlugin(),这样可以先实现地图功能,后续再逐步完善类型。
  2. 临时调试或快速原型开发
    • 场景:在项目开发初期做快速原型验证功能可行性时,对变量类型的严格要求并不重要,更关注功能能否实现。
    • 依据:使用any类型可以快速编写代码,减少因类型定义带来的开发成本。比如,在快速验证一个数据获取和展示的功能时,可以定义let data: any;,快速进行数据的获取和渲染操作,而不用一开始就精确地定义数据的结构。

unknown类型适用场景及依据

  1. 函数接收外部不可信数据时
    • 场景:例如在一个用户输入处理函数中,函数接收来自用户输入框的值,这个值的类型是不确定且不可信的。
    • 依据:使用unknown类型可以确保类型安全性。unknown类型的值在使用前必须进行类型检查或断言,相比any类型更加安全。例如:
    function handleUserInput(input: unknown) {
      if (typeof input ==='string') {
        // 此时可以安全地使用input
        console.log(input.length);
      }
    }
    
  2. 对类型进行动态检查时
    • 场景:在编写通用的工具函数,需要处理多种类型的数据,但又要保证类型安全的情况下。
    • 依据unknown类型可以让函数接收任何类型的值,然后通过类型检查来确定如何处理。比如一个通用的打印函数,能处理不同类型的数据:
    function printValue(value: unknown) {
      if (Array.isArray(value)) {
        value.forEach((item) => console.log(item));
      } else if (typeof value === 'object' && value!== null) {
        console.log(JSON.stringify(value));
      } else {
        console.log(value);
      }
    }
    
    这里使用unknown类型,保证了函数能处理各种类型数据的同时,通过类型检查确保了类型安全,而any类型可能会在不经意间引入类型错误。