function add<T extends number | bigint>(a: T, b: T): T {
if (typeof a === 'number' && typeof b === 'number') {
return (a + b) as T;
} else if (typeof a === 'bigint' && typeof b === 'bigint') {
return (a + b) as T;
}
throw new Error('Both parameters must be of the same numeric type');
}
类型参数约束在这个场景中的作用:
- 保证类型安全:通过
T extends number | bigint
约束,确保传入函数的参数a
和b
只能是number
或者bigint
类型,避免传入其他不支持加法运算的类型,如字符串、对象等,从而提高代码的可靠性和稳定性。
- 支持多态:虽然限制了类型必须是数值类型,但可以接受
number
或者bigint
,实现了一定程度的多态。使得函数可以处理不同数值类型的输入,而不需要为number
和bigint
分别编写不同的函数。
- 返回值类型一致性:约束类型参数后,返回值类型可以确定为与参数类型相同的
T
,确保返回值类型与输入参数类型一致,符合预期。