当前位置: 首页 > news >正文

面试题-定义一个函数入参数是any类型,返回值是string类型,如何写出这个函数,代码示例

在 TypeScript 里,要定义一个入参为any类型、返回值为string类型的函数,可参考下面几种实现方式:

1. 基础实现

直接把入参转换为字符串返回。

function anyToString(input: any): string {return String(input); // 使用String()进行类型转换
}// 示例
console.log(anyToString(123));       // "123"
console.log(anyToString(true));      // "true"
console.log(anyToString({ a: 1 }));  // "[object Object]"

2. 自定义转换逻辑

依据输入值的类型,执行不同的转换逻辑。

function anyToString(input: any): string {if (typeof input === "string") {return input; // 字符串直接返回} else if (typeof input === "object") {if (input === null) return "null";try {return JSON.stringify(input); // 对象转JSON字符串} catch (e) {return String(input); // 转换失败则使用默认转换}} else if (typeof input === "function") {return input.toString(); // 函数转字符串} else {return String(input); // 其他类型使用默认转换}
}// 示例
console.log(anyToString({ name: "Alice" }));  // "{"name":"Alice"}"
console.log(anyToString(() => {}));           // "function () {}"

3. 安全转换(避免undefinednull

undefinednull提供默认值。

function anyToString(input: any): string {if (input === undefined) return ""; // 处理undefinedif (input === null) return "";      // 处理nullreturn String(input);
}// 示例
console.log(anyToString(undefined));  // ""
console.log(anyToString(null));       // ""

4. 类型守卫辅助

结合类型守卫,让转换逻辑更加清晰。

function isObject(input: any): input is object {return typeof input === "object" && input !== null;
}function anyToString(input: any): string {if (typeof input === "string") return input;if (isObject(input)) {try {return JSON.stringify(input);} catch {return "[object]";}}return String(input);
}

5. 处理特殊对象

针对特定类型的对象(如 Date),进行特殊处理。

function anyToString(input: any): string {if (input instanceof Date) {return input.toISOString(); // 日期转ISO字符串}if (typeof input === "object" && input !== null) {return JSON.stringify(input);}return String(input);
}// 示例
console.log(anyToString(new Date()));  // "2023-01-01T00:00:00.000Z"

注意事项

  • 使用String()还是.toString()

    • String(input)能处理nullundefined(返回"null""undefined")。
    • input.toString()在输入为nullundefined时会报错。
  • 对象循环引用问题

    typescript

    const obj = { a: 1 };
    obj.self = obj; // 循环引用// console.log(anyToString(obj)); // 会触发JSON.stringify()错误
    

总结

依据实际需求,挑选合适的转换策略:

// 简单版本
function anyToString(input: any): string {return String(input);
}// 增强版本
function anyToString(input: any): string {if (input === undefined || input === null) return "";if (input instanceof Date) return input.toISOString();if (typeof input === "object") {try {return JSON.stringify(input);} catch {return String(input);}}return String(input);
}
http://www.xdnf.cn/news/1063099.html

相关文章:

  • ncu学习笔记01——合并访存
  • 系统化的Node.js服务器搭建攻略
  • 将Python的JSON字符串转换为JSON
  • UE5 游戏模板 —— FirstShootGame
  • Docker简单介绍与使用以及下载对应镜像(项目前置)
  • 【软考高级系统架构论文】论湖仓一体架构及其应用
  • RNN工作原理和架构
  • Python的6万张图像数据集CIFAR-10和CIFAR-100说明
  • Redis哨兵模式的学习(三)
  • STM32F103_LL库+寄存器学习笔记12.3 - 串口DMA高效收发实战3:支持多实例化的版本
  • 【24】二维码数据集(有v5/v8模型)/YOLO二维码检测
  • 项目拓展-Spring实现策略类统一管理
  • 【Elasticsearch】脚本(Script)
  • Duende Identity Server学习之一:认证服务器及一个Oidc/OAuth认证、用于Machine 2 Machine的客户端
  • 零基础学习Redis(12) -- Java连接redis服务器
  • 跟着AI学习C# Day29
  • 【LeetCode#第198题】打家劫舍(一维dp)
  • 【论文笔记】【强化微调】T-GRPO:对视频数据进行强化微调
  • MySQL误删数据急救指南:基于Binlog日志的实战恢复详解
  • ESP32 ESP-IDF Ubuntu平台工具链的标准设置
  • 山姆·奥特曼:从YC到OpenAI,硅谷创新之星的崛起
  • 01-驱动开发开篇
  • 冰箱压缩机电机驱动板【电源部分】
  • ARCGIS国土超级工具集1.6更新说明
  • 跟着AI学习C# Day27
  • 华为云Flexus+DeepSeek征文|基于华为云一键部署Dify LLM 应用构建 PPT 生成助手的开发与实践
  • 力扣-72.编辑距离
  • 构建高效智能体系统:从简单到复杂,找到最适合你的解决方案
  • 3D可视化数字孪生智能服务平台-物联网智控节能控、管、维一体化技术架构
  • Gartner《AI-Driven Methods for Cost-Efficiency》学习心得