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;
} else {
throw new Error('参数类型错误');
}
}
宽进严出策略的体现
- 宽进:在函数定义部分,通过函数重载定义了多种参数类型组合(
number, number
和string, string
),这允许函数接受不同类型的输入,表现出“宽进”的特点。同时,实现部分使用了更宽泛的any
类型来接受参数,进一步体现宽进,因为any
类型可以接受任意类型的数据。
- 严出:在返回值类型定义上,对于不同的参数类型组合,明确指定了对应的返回值类型(
number
或string
),非常严格。并且在实现中,如果传入的参数类型不符合预期,会抛出错误,而不是返回一个模糊或不匹配的结果,这体现了“严出”策略。