带有泛型参数的TypeScript InstanceType
我正在构建一个库,它允许使用者向它提供构造函数/类,该构造函数/类的实例将构成它的一个公共成员 对于一个简单的非泛型类,这很好,我们可以在库实例的公共接口上获得准确的推断intellisense和类型安全性:带有泛型参数的TypeScript InstanceType,typescript,generics,Typescript,Generics,我正在构建一个库,它允许使用者向它提供构造函数/类,该构造函数/类的实例将构成它的一个公共成员 对于一个简单的非泛型类,这很好,我们可以在库实例的公共接口上获得准确的推断intellisense和类型安全性: class MyLibrary any>{ public foo:InstanceType; 构造函数(ConsumerNewable:TNewable){ this.foo=new ConsumerNewable(); } } 类ConsumerProvidedClass{} const
class MyLibrary any>{
public foo:InstanceType;
构造函数(ConsumerNewable:TNewable){
this.foo=new ConsumerNewable();
}
}
类ConsumerProvidedClass{}
const library=新的MyLibrary(ConsumerProvidedClass);
library.foo//类型:ConsumerProvidedClass
现在考虑“代码> ConsumerProvidedClass < /代码>的场景本身有一个通用的参数,它定义了它的行为的某些方面。这对于这个问题并不重要,但实际用例是一个RxJS
主题
或行为主题
,其中TThroughput
是可观察对象的吞吐量类型。例如:
class ConsumerProvidedClass{…}
该库现已扩展,以允许使用者提供类型为TModel
的“初始值”,该值将在实例化时传递给ConsumerProvidedClass
,并成为其吞吐量类型:
class MyLibrary any,TModel>{
public foo:InstanceType;
构造函数(ConsumerNewable:TNewable,initialValue:TModel){
this.foo=新的ConsumerNewable(初始值);
}
}
类ConsumerProvidedClass{}
类ConsumerProvidedModel{}
const library=new MyLibrary(ConsumerProvidedClass,new ConsumerProvidedModel());
library.foo//类型:ConsumerProvidedClass
问题在于,属性.foo
上的intellisense正确地推断出ConsumerProvidedClass
,但不知道其通用吞吐量类型,并返回到
我想看到的是:
library.foo//type:ConsumerProvidedClass
但这将取决于能否将TModel
提供给InstanceType
作为通用参数。我还没有找到任何关于如何做到这一点的信息,或者如果确实有可能的话。理想情况下,我想这样做:
publicfoo:(InstanceType);
但不幸的是,这不是有效的TypeScript
当然,我可以让使用者在实例化库时显式地传递所有泛型类型,但我更希望在可能的情况下推断所有内容,以获得更好的开发人员体验
非常感谢您的任何见解。也许还有另一种方法我还没有找到。我猜这是不可能的,因为你没有办法声明
t可交换的
是一种通用类型,采用TModel
。TypeScript缺乏必要的表示你要找的内容的方法,不幸的是,好的,谢谢-我想我是在功能需求领域。