面试题答案
一键面试- 类型断言:
- 当你明确知道
any
类型的值实际是什么类型时,使用类型断言。例如,如果一个变量是any
类型,但你确定它是一个字符串,你可以这样写:
let value: any = "hello"; let strLength: number = (value as string).length;
- 当你明确知道
- 自定义类型保护函数:
- 创建函数来检查
any
类型的值是否符合预期类型。例如:
function isString(value: any): value is string { return typeof value === "string"; } let value: any = "world"; if (isString(value)) { let strLength: number = value.length; }
- 创建函数来检查
- 使用类型守卫:
- 结合
instanceof
,typeof
等操作符来缩小any
类型的范围。 - 例如,当你不确定
any
类型的值是数组还是对象时:
let value: any = [1, 2, 3]; if (Array.isArray(value)) { let firstElement = value[0]; }
- 结合
- 对
any
类型值的属性访问进行检查:- 在访问
any
类型值的属性之前,先检查该属性是否存在。例如:
let obj: any = {name: "John"}; if ("name" in obj) { let name = obj.name; }
- 在访问
- 尽可能限制
any
类型的作用域:- 不要让
any
类型在代码中大范围传递。将使用any
类型的代码封装在尽量小的函数或模块内,减少其对其他部分代码的影响。 - 例如:
function processAnyValue(value: any) { // 在这里对any类型值进行处理,处理完返回一个更明确类型的值 let result = value.toString(); return result; }
- 不要让
- 文档注释:
- 对使用
any
类型的变量、函数参数和返回值添加详细的文档注释,说明预期的实际类型,方便其他开发者理解和维护代码。例如:
/** * 接收一个`any`类型的值,该值预期为数字 * @param value - 预期为数字的any类型值 * @returns 数字的平方 */ function squareValue(value: any): number { return Number(value) ** 2; }
- 对使用