面试题-定义一个函数入参数是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. 安全转换(避免undefined
和null
)
为undefined
和null
提供默认值。
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)
能处理null
和undefined
(返回"null"
和"undefined"
)。input.toString()
在输入为null
或undefined
时会报错。
-
对象循环引用问题:
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);
}