我有一个可以接受对象或值的函数。
export function A( param: string );
export function A({ param }: { param: string }) {
}
但我收到以下错误:
typescript过载签名与函数不兼容 实施
有什么问题?
export function A( param: string ): void
export function A({ param, ...rest }: { param: string}): void
export function A( param: string | { param: string = "initial", ...rest }) : void{
}
答案 0 :(得分:2)
如果有多个重载,最后一个是实现重载。从外部看不到实现过载,并且必须与所有其他重载兼容。在您的情况下,签名应如下所示:
export function A(param: string): void
export function A(param: { param: string, otherProp?: string }): void
export function A(paramOrObj: string | { param: string, otherProp?: string } = { param: "initial"}): void {
// If param is not string destructure
if (typeof paramOrObj !== "string") {
let { param, ...rest } = paramOrObj;
} else {
// otherwise use the string value
let param = paramOrObj;
}
}