面試題-定義一個函數入參數是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.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 研究背景與意義 隨著互聯網數據的爆炸式增長,個性化推薦系統成為提升用戶體驗的關鍵技術。準確捕捉用戶興趣需要大量多維度數據,但獲取高質量標注數據面臨隱私保護、數據分散等挑戰。網絡爬蟲技術為自動采集用戶行為數據提供了解決方案,而如何有效評估模型在個…