Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在TypeScript中的类的构造函数中指定泛型类_Typescript - Fatal编程技术网

如何在TypeScript中的类的构造函数中指定泛型类

如何在TypeScript中的类的构造函数中指定泛型类,typescript,Typescript,我想使用TypeScript将子类注入构造函数中的类中 下面是一些实际上不起作用的伪代码,我认为应该演示我正在尝试做的事情: type GenericConstructor<T> = { new (): T; } class MyClass { constructor( SubClass: GenericConstructor ) { this.subclass = new SubClass(); } } class MySubClass1 {}

我想使用TypeScript将子类注入构造函数中的类中

下面是一些实际上不起作用的伪代码,我认为应该演示我正在尝试做的事情:

type GenericConstructor<T> = { new (): T; }

class MyClass {
  constructor(
    SubClass: GenericConstructor
  ) {
     this.subclass = new SubClass();
  }
}

class MySubClass1 {}

class MySubClass2 {}

const withSubClass1 = new MyClass(MySubClass1);
const withSubClass2 = new MyClass(MySubClass2);
type GenericConstructor={new():T;}
类MyClass{
建造师(
子类:GenericConstructor
) {
this.subclass=新的subclass();
}
}
类MySubClass1{}
类MySubClass2{}
const with subclass1=新的MyClass(MySubClass1);
const with subclass2=新的MyClass(MySubClass2);
问题是TypeScript不允许我在构造函数上指定泛型参数(我怀疑我只是做错了什么)

我试图实现的是一个类(
MyClass
),它可以接受一个通用的子类,该子类满足它自己的特定接口。我想知道这样做的正确方法是否是指定一个接口,但我不完全确定如何实现


谢谢你的帮助

因此,您不能将
构造函数
方法声明设置为泛型,因为它会使类本身可能是泛型的。我的意思是,如果你有这个:

class Foo<T> { constructor<U>() { } } // error, but imagine no error
当我们构造它的实例时,我们得到的是:

const withSubClass1 = new MyClass(MySubClass1);
// const withSubClass1: MyClass<MySubClass1>

const withSubClass2 = new MyClass(MySubClass2);
// const withSubClass2: MyClass<MySubClass2>
然后,
MyClass
的实例将在其
子类
属性中看到该结构:

withSubClass1.subclass.a.toUpperCase(); // okay
withSubClass2.subclass.b.toLowerCase(); // okay

好吧,希望这会有帮助;祝你好运


您应该将
MyClass
本身设置为泛型,例如。如果这符合你的需要,我会写一个答案;否则请编辑问题以澄清。祝你好运正在查看。。。谢谢!虽然我现在遇到了另一个问题,但这很有效;)。典型的!谢谢你的帮助。非常感谢,特别是关于在空课上增加私人道具的额外提示-我不知道!
class MySubClass1 { a = "" }
class MySubClass2 { b = "" }
withSubClass1.subclass.a.toUpperCase(); // okay
withSubClass2.subclass.b.toLowerCase(); // okay