Typescript声明一个绑定方法访问一个类中的构造函数参数get undefined

vdzxcuhz  于 2023-11-20  发布在  TypeScript
关注(0)|答案(1)|浏览(172)

请参阅链接示例https://www.typescriptlang.org/play?#code/MYGwhgzhAEAyD2BzRBTATtA3gKG9aaKYAJvAHYgCe0ALmIhAFzQQ1oCWZiA2gLq75g5VmgCuwGvDQAKPPmgA6JXQbMRnHv3wBKLHPw0AFuwgKVMALy16EOQF8B0EEmhWhZCPBAoFzxAoAjTmJpd09vABpoAAMAEkwjEzMbO2YAUgho3WwHIA
我想在类的构造函数中有一个rest参数,但我发现我做不到。

class Logger {

  constructor(
    // A parameter property cannot be declared using a rest parameter.(1317)
    readonly ...tags: string[]
  ) {
    
  }
}

字符串
所以我使用下面的命令,但是我得到了另一个错误消息

class Logger {

  readonly tags: string[]

  constructor(
    ...tags: string[]
  ) {
    this.tags = tags
  }

  // Property 'tags' is used before its initialization.(2729)
  log = console.log.bind(console, `${this.tags}: %s`) 
}


我看看它是如何编译的,我发现this.log = console.log.bind(console, ${this.tags}:%s );被移到构造函数中,在赋值this.tags = tags之前,这就是为什么它显示错误。

"use strict";
class Logger {
    constructor(...tags) {
        this.log = console.log.bind(console, `${this.tags}: %s`);
        this.tags = tags;
    }
}


我觉得应该像这样的JavaScript代码

class Logger {
  constructor(...tags) {
    this.tags = tags;
  }
  log = console.log.bind(console, `${this.tags}: %s`);
}


我怎样才能在构造函数中有一个rest参数,就像上面的JavaScript没有错误?

laik7k3q

laik7k3q1#

我有点不清楚你的意图,但一个变通方案看起来像这样:

class Logger {

    readonly tags: string[]
    log:((...args: any[]) => void) | undefined = undefined;

    constructor(
      ...tags: string[]
    ) {
        this.tags = tags
        this.log = console.log.bind(console, `${this.tags}: %s`)
    }

}

字符串

相关问题