如果params是数字,则函数返回数字;字符串(如果有的话)不是



这是我的案例:

/**
* Add types to the `add` function, so it:
* - accepts `a` parameter of type string or number
* - accepts `b` parameter of type string or number
* - returns type number when both `a` and `b` are of type number
* - returns type string when at least one param is of type string
* 
* ⚠️ There is no need to modyfy the body of the function.
*/
function add(a,b)  {
if (typeof a === 'number' && typeof b === 'number') {
return a + b;
}
return String(a) + String(b);
}
////////////////////////////////////////////////////////////////////////////////
////////////////////   TEST CASES - look but don't modify   ////////////////////
////////////////////////////////////////////////////////////////////////////////
const sumA = add(1, 2);
const sumB = add(1, '2');
const sumC = add('1', 2);
const sumD = add('1', '2');
type cases = [
Expect<Equal<typeof sumA, number>>,
Expect<Equal<typeof sumB, string>>,
Expect<Equal<typeof sumC, string>>,
Expect<Equal<typeof sumD, string>>,
]
type Expect<T extends true> = T
type Equal<X, Y> =
(<T>() => T extends X ? 1 : 2) extends
(<T>() => T extends Y ? 1 : 2) ? true : false

无论我做什么(条件返回、键入别名(,它都不允许我通过Expect案例。

有人知道怎么解决吗?

游乐场

重载将在以下方面有所帮助:

function add(a: number, b: number): number
function add(a: string | number, b: string | number): string
function add(a: string | number, b: string | number): string | number {
if (typeof a === 'number' && typeof b === 'number') {
return a + b;
}
return String(a) + String(b);
}

游乐场

您可以在此处使用JavaScript的Overloading功能。添加给定函数的重载定义如下

function add(a: number, b: number) : number
function add(a: string | number, b: string | number) : string
function add(a: string | number,b: string |number) : string | number {
if (typeof a === 'number' && typeof b === 'number') {
return a + b;
}
return String(a) + String(b);
}

相关内容

  • 没有找到相关文章

最新更新