Typescript:返回`typeof class`的`instance type`

问题描述 投票:0回答:1

我有一个函数,当您输入Class nameClass constructor时,它将返回该Class的实例:

type ConstructorOf<C> = { new (...args: any[]): C; };

const ClassMap = {
  'Class1': Class1,
  'Class2': Class2,
};

function getInstance<Cls>(c: ConstructorOf<Cls>): Cls;
function getInstance<N extends keyof typeof ClassMap>(key: N): typeof ClassMap[N]; // It return typeof Class1/Class2
function getInstance<N extends keyof typeof ClassMap, Cls>(key: N | ConstructorOf<Cls>) {
  if (typeof m === 'string') {
    return CreateInstance(ClassMap[key]);
  }
  return CreateInstance(key);
}

getInstance的第二个定义不是我想要的,因为它返回了typeof Class,但没有返回Class

我应该如何修改此部分?

typescript typescript-typings typescript2.0 typescript-generics
1个回答
0
投票

您可以只使用InstanceType内置条件类型:

function getInstance<Cls>(c: ConstructorOf<Cls>): Cls;
function getInstance<N extends keyof typeof ClassMap>(key: N): InstanceType<typeof ClassMap[N]>; 
function getInstance<N extends keyof typeof ClassMap, Cls>(key: N | ConstructorOf<Cls>) {
  return null!
}

let o = getInstance("Class1"); // Class1

Playground Link

© www.soinside.com 2019 - 2024. All rights reserved.