Typescript重载签名传递对象和值

时间:2018-03-28 16:14:16

标签: typescript

我有一个可以接受对象或值的函数。

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{

}

1 个答案:

答案 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;
    }
}