I have tuple of Maybe
types:
class Maybe{ }
type MaybeTuple = [Maybe, Maybe, Maybe];
You'll need to use a mapped tuple type, which is supported in TypeScript 3.1.
You can make a mapped type that has properties 0
, 1
, 2
and length
of the correct types, like this:
class Maybe {}
type MaybeTuple = [Maybe, Maybe, Maybe];
type MaybeType = T extends Maybe ? MaybeType : never;
type MaybeTypes = {
[Index in keyof Tuple]: MaybeType;
} & {length: Tuple['length']};
let extractedTypes: MaybeTypes = ['hello', 3, true];
If you're using an older version of typescript, you can use an unreleased version of TypeScript, or as a workaround, you can write a conditional type to match against tuples as long as you think you are likely to have, e.g., like this.