我想写一个add函数
当参数都为空时,则返回空
当其中一个参数为空时,则返回另一个参数
当参数都是数字时,则返回它们的和
运动场
function add<A extends number | null, B extends number | null>(a: A, b: B):
A extends null
? B extends null
? null
: B
: B extends null
? A
: number {
if (a == null) {
if (b == null) {
return null // Type 'null' is not assignable to type 'A extends null ? B extends null ? null : B : B extends null ? A : number'.
} else {
return b
}
} else {
if (b == null) {
return a
} else {
return a + b
}
}
}
const a = add(1 , 333) // number
const b = add(1 , null) // 1
const c = add(null , 2) // 2
const d = add(null , null) // null
为什么编译器会这样抱怨?代码和返回类型声明几乎是一样的。
2条答案
按热度按时间oyt4ldly1#
我只使用重载:
请注意,重载不对实现进行类型检查。
Playground
62o28rlo2#
怎么会这样?