Typescript 是否可能有一个使用索引(类型或对象)的泛型约束?

Typescript 是否可能有一个使用索引(类型或对象)的泛型约束?,typescript,generics,Typescript,Generics,我正在生成客户机模型以及相应的主键 我希望有一个方法签名,根据这个方法签名,第二个参数应该是它的主键,谓词是实体 以下类型/类的使用不是必需的,可能会成为映射等的接口或常量 我尝试的是: 导出类型ClassType=new…args:any[]=>T 出口类客户{ customerId:编号; } 出口级卖方{ vendorId:编号; } 导出类Customer实现CustomerPk{ customerId:编号; 名称:字符串; } 导出类VendorPk实现了VendorPk{ vend

我正在生成客户机模型以及相应的主键

我希望有一个方法签名,根据这个方法签名,第二个参数应该是它的主键,谓词是实体

以下类型/类的使用不是必需的,可能会成为映射等的接口或常量

我尝试的是:

导出类型ClassType=new…args:any[]=>T 出口类客户{ customerId:编号; } 出口级卖方{ vendorId:编号; } 导出类Customer实现CustomerPk{ customerId:编号; 名称:字符串; } 导出类VendorPk实现了VendorPk{ vendorId:编号; 名称:字符串; } 出口类型EntityType=客户|供应商; 出口类型EntityPk=CustomerPk | VendorPk; 导出类型entityToPkMap={ 客户:CustomerPk,供应商:VendorPk } 这样消费:

构造函数{ const myCust=this.GetDataCustomer,新CustomerPk; const myVend=this.GetDataVendor,new CustomerPk;//我希望在设计时保护它。 } //我可以如何构造生成的代码 //能够消费与以下类似的东西吗? publicGetDataEntity:ClassType,primaryKey:K:T{ //从商店拿。 抛出新错误“未实现”; } 我尝试了以下各种方法,但没有找到我想要的:

publicGetDataEntity:ClassType,primaryKey:K:T 哪些类型为“T”的错误不能用于索引类型为“entityToPkMap”。

您可以使用这些错误来解析主键类型:

type PkMap<T> =
    T extends Customer ? CustomerPk :
    T extends Vendor ? VendorPk :
    never;

class Foo {
    constructor() {
        const myCust = this.GetData(Customer, new CustomerPk());
        const myVend = this.GetData(Vendor, new CustomerPk()); // expect error
    }

    public GetData<T>(entity: ClassType<T>, primaryKey: PkMap<T>): T {
        throw new Error('Not Implemented');
    }
}

哦,太棒了!谢谢:另一个选项是向每个类添加静态类型鉴别器字符串,然后构建类似于您所尝试的映射。还有一个选项-将主键构造函数作为类构造函数的静态属性附加。这完全满足了我的需要。输入时,主密钥可以是接口和;VSCode中的Ctrl+空格表示PrimaryKey道具名称。经过一些实现后,~75个实体导致以下错误:类型实例化太深,可能无限。ts2589。通过使用TS>3.9,我可以在VS代码中消除“红色曲线”,但我使用的Angular with目前还不支持TS>3.9。:/链接:这里有一个工作表,太长了,无法发表评论