是否可以重用某个类的泛型的类型参数

时间:2019-11-28 07:42:53

标签: typescript generics types extraction

例如,我有以下代码

    class Foo {
      bar: Promise<string[]>;

      // a is the same type as type of promise in bar 
      baz(a: ????): Foo['bar'] {
        // some code
        return Promise.resolve(a);
      } 
    }

我可以获取bar的类型-但我希望在没有创建额外的类型或接口的情况下获取promise内部的类型。

我进行了很多搜索,我认为这尚未实现或建议,但是在创建功能请求之前,我想确定一下。

1 个答案:

答案 0 :(得分:2)

您可以做到,但是您将需要一个条件类型来通过infer从泛型类中提取类型参数:

type UnboxPromise<T extends Promise<any>> = T extends Promise<infer U> ? U : never;
class Foo {
    bar: Promise<string[]>;

    // a is the same type as type of promise in bar 
    baz(a: UnboxPromise<Foo['bar']>): Foo['bar'] {
        // some code
        return Promise.resolve(a);
    }
}

Playground Link