Typescript 使用构造函数名称作为返回类型的索引签名

Typescript 使用构造函数名称作为返回类型的索引签名,typescript,generics,angular7,Typescript,Generics,Angular7,是否可以使用构造函数的name属性作为索引签名,分别作为属性名 例子 我想为服务器响应提供一个通用映射函数。这些可能包括多个实体。 例如 预期结果: const mappedResponse: {User: User, UserGroup: UserGroup} = mapToEntity(serverResponse, User, UserGroup); const mappedResponse: {[key: string]: User | UserGroup} = mapToEntity

是否可以使用构造函数的
name
属性作为索引签名,分别作为属性名

例子 我想为服务器响应提供一个通用映射函数。这些可能包括多个实体。 例如

预期结果:

const mappedResponse: {User: User, UserGroup: UserGroup} = mapToEntity(serverResponse, User, UserGroup);
const mappedResponse: {[key: string]: User | UserGroup} = mapToEntity(serverResponse, User, UserGroup);
取得的成果:

const mappedResponse: {User: User, UserGroup: UserGroup} = mapToEntity(serverResponse, User, UserGroup);
const mappedResponse: {[key: string]: User | UserGroup} = mapToEntity(serverResponse, User, UserGroup);
当前mapToEntity实现 编辑2 我找到了一个解决办法,我可以接受

export function mapToEntity<A, B>(serverResponse: IServerResponse, cFn1: ConstructorFunction<A>, cFn2: ConstructorFunction<B>): [A[], B[]];
您还可以将其保存在一个变量中,并从数组中获取类型安全属性

    const test: [User[], UserGroup[]] = mapToEntity(fakeResponse, User, UserGroup);
    const x = test[1]; // has type UserGroup[]
export function mapToEntity<A, B>(serverResponse: IServerResponse, cFn1: ConstructorFunction<A>, cFn2: ConstructorFunction<B>): {ConstructorName<cFn1<A>>: A[], ConstructorName<cFn2<B>>: B[]}; // specify index signatures here
export function mapToEntity<A, B>(serverResponse: IServerResponse, cFn1: ConstructorFunction<A>, cFn2: ConstructorFunction<B>): {entity1: A[], entity2: B[]};
const { 'entity1': user, 'entity2': userGroup } = mapToEntity(fakeResponse, User, UserGroup);
export function mapToEntity<A, B>(serverResponse: IServerResponse, cFn1: ConstructorFunction<A>, cFn2: ConstructorFunction<B>): [A[], B[]];
const [user, userGroup] = mapToEntity(fakeResponse, User, UserGroup);
    const test: [User[], UserGroup[]] = mapToEntity(fakeResponse, User, UserGroup);
    const x = test[1]; // has type UserGroup[]