代码之家  ›  专栏  ›  技术社区  ›  char m

在typescript中,如何将参数从一个参数量可变的函数传递到另一个参数量可变的函数?

  •  0
  • char m  · 技术社区  · 5 年前

    这行不通

    static myDebug(message: string, ...optionalParameters: any[]): void {
        // tslint:disable-next-line
        console.debug(message, optionalParameters);
    }
    

    test myDebug this.url = Array(2), windowId = %d
    

    而不是

    test myDebug this.url = /myurl, windowId = 123
    

    在C中,这是不可能的,所以我需要这样做:

        va_start(Args, Message);
        vsnprintf_s(Buffer, sizeof(Buffer), _TRUNCATE, Format, Args);
        va_end(Args);
        CallTheFunction(Buffer);
    
    1 回复  |  直到 5 年前
        1
  •  1
  •   T.J. Crowder    5 年前

    如果要记录rest数组的条目而不是rest数组本身,请将其展开:

    static myDebug(message: string, ...optionalParameters: any[]): void {
        // tslint:disable-next-line
        console.debug(message, ...optionalParameters);
        // --------------------^^^
    }
    

    如果你打电话的话 myDebug 这样地:

    myDebug("hi there", 1, 2, 3);
    

    它会呼叫 console.debug 像这样(有效地):

    console.debug(message, optionalParameters[0], optionalParameters[1], optionalParameters[2]);
    
        2
  •  0
  •   jonrsharpe    5 年前

    您可以通过使用具有可选参数的对象来解决此问题,这也将为所有选项提供良好的自动完成功能。使用 any

    interface OptionalParameters {
        name?:string
    }
    
    static myDebug(p: OptionalParameters): void {
        console.dir(p)
    }
    

    调用myDebug时,可以传递一个空对象或具有name参数的对象。

    myDebug({})                              // ok
    myDebug({name:"hello"})                  // ok
    myDebug({name:"hello", test:"world"})    // test is not an option