当前位置: 首页 > 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.lqws.cn/news/473599.html

相关文章:

  • 从C++编程入手设计模式——观察者模式
  • Matplotlib绘制矩阵图,plt.matshow/imshow 与 ax.pcolor(pcolormesh)方法的使用
  • Python的6万张图像数据集CIFAR-10和CIFAR-100说明
  • PowerBI HtmlContent生成表格
  • 【软考高级系统架构论文】论企业应用系统的数据持久层架构设计
  • MinIO入门教程:从零开始搭建方便快捷的分布式对象存储服务
  • 一文详解归并分治算法
  • Linux -- 文件描述符和重定向
  • Java 面试指南:深度解析 Spring Boot 与微服务架构
  • OpenBMC构建之旅:从命令到镜像的内存执行全解析
  • Java 包装类详解
  • 机器学习15-XGBoost
  • 吴恩达:从斯坦福到 Coursera,他的深度学习布道之路
  • 一套基于粒子群优化(PSO)算法的天线波束扫描MATLAB实现方案
  • Vibe Coding - 进阶 Cursor Rules
  • 深度学习的可解释性——SketchXAI:人类草图可解释性初探
  • LangChain-5-agent
  • 【51单片机2位数码管100毫秒的9.9秒表】2022-5-16
  • CNN工作原理和架构
  • 15.1 LangChain多轮对话训练实战:打造高自然度语言学习Agent的三大核心技术
  • 编程基础:调用访问
  • MagicTryOn: 变革性的AI视频虚拟试衣体验
  • 磁性传感器在电机控制闭环系统中的反馈作用
  • α射线检测DIY 空霸KB6011云母窗口魔改版 5250饼管 新固件下载
  • VMWare-Centos7.x 忘记 Linux 密码
  • QT学习教程(三十五)
  • WPF调试三种工具介绍:Live Visual Tree、Live Property Explorer与Snoop
  • FVISION 未来视界工作室:AI驱动的创新与智能外包平台
  • SpringBoot电脑商城项目--显示勾选+确认订单页收货地址
  • 【Kubernetes】从零搭建K8s集群:虚拟机环境配置全指南(DNS/网络/防火墙/SELinux全解析一站式配置图文教程)