typescript - Er det mulig å gjenbruke typeparameteren til generics til en klasse


For eksempel har jeg følgende kode

    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);
      } 
    }

Jeg kan få typen på bar - men jeg vil gjerne få typen inne i en promise uten å lage ekstra type eller grensesnitt.

Jeg har søkt mye, og jeg tror dette ikke er implementert eller foreslått ennå, men før jeg oppretter en forespørsel om funksjon vil jeg være sikker.

Svar #1

Du kan gjøre det, men du vil trenge en betinget type for å hente typeparameteren fra den generiske klassen via 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);
    }
}

Lekeromlenke