ES6 typescript class 在里面创建自己的对象

ES6 typescript class create object of itself inside

我创建了一个 class 并在其中 class 我想创建一个由对象本身组成的数组。正常情况下javascript如果实现如下

class Person{
     constructor(name){
         this.name=name;
      }
     setList(list){
        let listItem=[];
        for(const lt of list){
           listItem.push(new this.constructor(lt));
        }
       return listItem;
     }
}

打字稿

class Person{
     name:string;
     constructor(name){
         this.name=name;
      }
     setList=(list:Array<string>)=>{
        let listItem=[];
        for(const lt of list){
           listItem.push(new this.constructor(lt));
        }
       return listItem;
     }
}

我在代码 this.constructor(lt) 上面得到错误如下

This expression is not constructable.
  Type 'Function' has no construct signatures.ts(2351)

在 TypeScript 中,class 中 this.constructor 的类型总是 Function;但是,TypeScript 允许您在其声明中引用 class,因此,只需将 this.constructor 替换为 class、(Person)本身的名称会工作正常。见下文:

class Person {
  name: string;
  constructor(name: string) {
    this.name = name;
  }
  setList = (list: Array<string>) => {
    let listItem = [];
    for (const lt of list) {
      listItem.push(new Person(lt));
    }
    return listItem;
  };
}

如果您绝对需要采用 this.constructor 方式,您可以像这样强类型构造函数:

class Person {
  name: string;
  ["constructor"]: typeof Person;

  constructor(name: string) {
    this.name = name;
  }
  setList = (list: Array<string>) => {
    let listItem = [];
    for (const lt of list) {
      listItem.push(new this.constructor(lt));
    }
    return listItem;
  };
}

希望对您有所帮助!