【问题标题】:Defining return type of Factory method with TypeScript generics使用 TypeScript 泛型定义 Factory 方法的返回类型
【发布时间】:2019-02-06 11:24:43
【问题描述】:

本质上,我希望能够使用构造函数调用通用 TypeScript 函数,并返回构造函数乘积类型的正确类型变量。请参阅下面的代码示例。最终的 console.log 有类型错误。

class TestType {
  constructor(
    public someVal: number
  ) {}
}

type GenericConstructor = new (...args: any) => any;

let map = new Map<GenericConstructor, any>();
map.set(TestType, new TestType(7));

console.log(map.get(TestType).someVal);

function retrieve<T extends GenericConstructor>(constructor: T): T {
  return map.get(constructor);
}

let retrieved = retrieve(TestType);
console.log(`retrieved: ${retrieved.someVal}`);

我搜索了其他答案,但似乎没有什么能完全涵盖这一点。我也觉得这可能是不可能的,因为我试图一般地而不是从实例中提取类型。

至少我希望这个功能能够正常工作,并且输入正确:

let val: SomeType = retrieve(SomeTypeConstructor);

如果没有第二个类型参数,这可能吗?

【问题讨论】:

    标签: javascript typescript


    【解决方案1】:

    InstanceType&lt;T&gt; 是你需要的:

    function retrieve<T extends GenericConstructor>(constructor: T): InstanceType<T> {
      return map.get(constructor);
    }
    

    【讨论】:

    • 正是我想要的!我知道某处肯定有它的语言功能,谢谢。
    • A link to the docs 为后代。
    猜你喜欢
    • 2022-10-12
    • 2016-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多