泛型“New”约束等效于 TypeScript

Generics "New" constraint equivalent in TypeScript

本文关键字:TypeScript 约束 New 泛型      更新时间:2023-09-26

在C#中,你可以做:

class ItemFactory<T> where T : new()
{
    public T GetNewItem()
    {
        return new T();
    }
}

在打字稿中,我设法实现的最接近的是:

class ItemFactory<T>{
  instantiatibleModel : new() => T;
  constructor(modelWithctor : { new(): T }){
    this.instantiatibleModel = modelWithctor;
  }

  GetNewItem() : T{
     return new this.instantiatibleModel();
   }
}

任何想法如何让它更干净/更接近 C# 语法?

您希望它适用于所有类吗?如果你有一个超级基类,可以用简单的方式完成。

class Base {
    hi() {
        alert('base');
    }
}
class Derived extends Base {
    hi() {
        alert('Der');
    }
}
class Gen<T extends Base >{
    constructor(private testType) {
    }
 create<T>(): T { 
    return new this.testType();
 }
}
var g=new Gen<Derived>(Derived);
var obj= g.create();