面试题答案
一键面试- 运行时区分重载函数:
- 在TypeScript中,由于类型擦除,运行时并没有实际的“重载函数”概念。JavaScript本身不支持函数重载,TypeScript的函数重载是在编译期通过类型系统来实现的。
- 例如,假设有如下TypeScript函数重载定义:
function add(a: number, b: number): number; function add(a: string, b: string): string; function add(a: any, b: any): any { if (typeof a === 'number' && typeof b === 'number') { return a + b; } else if (typeof a ==='string' && typeof b ==='string') { return a + b; } return null; }
- 在运行时,实际执行的是最后那个统一实现的函数
add
。TypeScript编译器会根据传入参数的类型,在编译期选择合适的重载定义进行类型检查,但运行时只有一个函数体。
- 确保类型安全且考虑类型擦除影响:
- 明确重载定义:首先要在函数声明部分明确写出不同参数类型组合的重载定义。例如上述
add
函数,分别定义了接收两个number
类型参数和两个string
类型参数的重载。 - 统一实现检查:在统一的函数实现体中,要根据传入参数的实际类型进行检查和处理。如上述
add
函数实现中,通过typeof
检查参数类型,确保不同类型输入有正确的处理逻辑,从而保证类型安全。这样即使在运行时类型信息被擦除,也能正确处理不同类型的输入。
- 明确重载定义:首先要在函数声明部分明确写出不同参数类型组合的重载定义。例如上述