在 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.pswp.cn/web/86052.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/86052.shtml
英文地址,请注明出处:http://en.pswp.cn/web/86052.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TensorFlow深度学习实战——Transformer模型评价指标

TensorFlow深度学习实战——Transformer模型评价指标 0. 前言1. 质量1.1 GLUE1.2 SuperGLUE1.3 SQuAD1.4 RACE1.5 NLP-progress2. 参数规模3. 服务成本相关链接0. 前言 可以使用多种类型的指标评估 Transformer 模型。在本节中,我们将学习一些用于评估 Transformer 的关键因素…

linux内核学习(一)---内核社区介绍及补丁提交

目录 一、引言 二、内核源码 三、内核社区 ------>3.1、社区的组织架构 ------>3.2、内核社区的工作方式 ------>3.3、内核社区核心网站 ------------>3.3.1、Linux Kernel 官网 ------------>3.3.2、Linux Kernel 邮件列表(LKML) ------------>3.3…

轻量级web开发框架之Flask web开发框架学习:get请求数据的发送

Flask是一个使用 Python 编写的轻量级 Web 应用框架,简介灵活,可快速构建开发框架。 协作流程示例 客户端请求 → Web服务器(Nginx) → WSGI服务器(Gunicorn/uWSGI)↓WSGI协议传递请求数据(env…

Vue 3 异步三剑客:Suspense、async setup() 和 await 的戏剧性关系,白屏的解决

文章目录 🎭 Vue 3 异步三剑客:Suspense、async setup() 和 await 的戏剧性关系,白屏的解决🎬 角色介绍🎭 正常演出流程(有 Suspense 时)💥 灾难场景(缺少 Suspense 时&a…

【JavaScript-Day 48】告别 Ajax,拥抱现代网络请求:Fetch API 完全指南

Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…

BUUCTF在线评测-练习场-WebCTF习题[极客大挑战 2019]Knife1-flag获取、解析

解题思路 这题没有什么解题思路,打开靶场,标题是白给的shell 页面显示了 eval($_POST["Syc"]); 这是php webshell命令,密码为Syc,可直接通过该命令连接,根据标题提示,直接尝试用蚁剑连接 连接成…

Qt—(Qt线程,Qt进程,,QT与sqlite数据库)

一 Qt线程与进程概述 线程与进程对比 特性线程 (QThread)进程 (QProcess)内存空间共享父进程内存独立内存空间创建开销小 (几MB)大 (几十MB)通信方式共享内存/信号槽管道/套接字/文件崩溃影响导致整个进程终止仅自身终止适用场景高并发任务、计算密集型隔离第三方应用、安全需求…

计算机视觉阶段一:CV入门基础

目录 学习目标: 一、核心知识点 二、实用工具推荐 三、学习内容与步骤 1.环境搭建 2.图像获取与显示 3 图像基础处理 4 图像几何变换 5 图像像素操作 四、实战任务建议 实战 1:图像加载 显示 保存 实战 2:灰度图 边缘检测 图…

新增MCP接入和AutoAgent,汉得灵猿AI中台1.6版正式发布!

汉得灵猿(大圣)AI中台1.6版本,经过数月迭代,现已正式发布! 新版本最被期待的新功能,无疑是4月份预告的MCP接入,而令人同样激动的另一项新功能,则是AutoAgent动态规划智能体。除了两…

总结汇报思路

一、明确汇报目标 受众需求:领导/客户/团队最关心什么?(结果?问题?下一步计划?) 核心目的:展示成果?争取资源?总结经验?解决问题? 时…

文件锁的艺术:深入解析 `fcntl(F_SETLK/F_GETLK)`

引言:在共享资源时代守护数据一致性 在多进程/多线程的应用场景中,文件作为一种共享资源常常面临被并发访问的挑战。想象一个数据库系统,多个客户端可能同时尝试修改同一数据文件;或者一个配置文件,需要确保在更新时不…

一个免费的视频、音频、文本、图片多媒体处理工具

大家好,我是小悟。 给大家推荐一款可以免费使用的视频、音频、文本、图片处理工具,名字叫百创工坊,不用下载,不用注册,有免费的用就赶紧薅吧。 视频工具 提取音频:从视频中提取音频文件,支持多…

在 ef core 中操作复杂类型的序列化和反序列化时,如何全局设置 utf-8 编码避免中文字符被转义?

我们在使用 Entity Framework Core(EF Core) 时,如果希望 全局设置 JSON 序列化和反序列化使用 UTF-8 编码,通常需要配置 System.Text.Json 的默认行为,因为 EF Core 6.0 及以上版本默认使用 System.Text.Json 进行 JS…

WPF CommunityToolkit.Mvvm 信使 (ObservableRecipient)

WPF CommunityToolkit.Mvvm 中的 ObservableRecipient 是什么? ObservableRecipient 是 .NET Community Toolkit MVVM 库中的一个核心类,继承自 ObservableObject。它专为 WPF 应用设计,提供以下核心功能: 基础数据绑定支持&am…

《C++》命名空间简述

文章目录 一、命名空间定义二、访问命名空间内的成员三、标准命名空间:std四、嵌套命名空间 一、命名空间定义 在C中,命名空间(namespace)是一种将标识符分组的机制,用于避免重命名。例如: int a 3;int main() {int a 0;print…

【路径规划】基于Matlab的改进RRT算法二维/三维路径规划

基于Matlab的改进RRT算法二维/三维路径规划 一、引言 在机器人学、自动驾驶等领域,路径规划是一个关键问题,它旨在为机器人或车辆找到一条从起始点到目标点的安全、高效的路径。RRT(Rapidly-exploring Random Trees)算法作为一种…

PHP的命名空间与自动加载机制

在PHP 5.3版本之后,引入了命名空间的概念,这为解决全局命名冲突和促进代码的模块化提供了强有力的工具。命名空间允许开发者将类、函数和常量封装在不同的命名空间中,从而避免了全局范围内的名称冲突问题。 命名空间基础 命名空间在PHP中是…

OpenSIPS 邂逅 Kafka:构建高效 VoIP 消息处理架构

使用场景使用步骤 引入模块组装&发送数据消费数据故障转移 使用场景 异步日志处理:将 OpenSIPS 中的 SIP 信令日志、通话记录(CDR)等数据发送到 Kafka 队列中。 事件通知与监控:利用 OpenSIPS 的 event_interface 模块将 S…

《AI大模型应用技术开发工程师》学习总结

以下是对你提供的《AI大模型应用技术开发工程师》课程内容的系统梳理,已去除所有广告、价格、报名、个人信息等内容,并补全了技术要点,最后给出客观的学习建议和个人感想,适合公开分享或自我学习参考。 AI大模型应用技术开发工程师…

Python爬虫实战:研究LOSO相关技术

1. 引言 1.1 研究背景与意义 随着互联网数据的爆炸式增长,个性化推荐系统成为提升用户体验的关键技术。准确捕捉用户兴趣需要大量多维度数据,但获取高质量标注数据面临隐私保护、数据分散等挑战。网络爬虫技术为自动采集用户行为数据提供了解决方案,而如何有效评估模型在个…