【发布时间】:2020-01-25 08:56:03
【问题描述】:
阅读rest elements in tuple types 并试图弄清楚如何提取类型的泛型部分:
type Attribute<Type> = { id: string, type?: Type };
type Position = { x: number, y: number };
let Position: Attribute<Position> = { id: "position" };
type Status = "active" | "inactive";
let Status: Attribute<Status> = { id: "status" };
我确信有一种方法可以编写条件类型,它将各种Attribute<T> 的元组映射到各种T 的元组。
type AttributeTypes<Attributes extends Attribute<any>[]> =
Attributes extends Attribute<infer T> ? T[] : never;
type Result = AttributeTypes<[typeof Position, typeof Status]> // should be `[Position, Status]`
但我不太了解推理步骤,它总是以never 分支结束。
最后一步是编写一个函数,使用推断类型作为返回的一部分 (Playground):
function getAll<Attributes extends Attribute<any>[]>(
...attributes: Attributes
): AttributeTypes<Attributes> {
return attributes.map(attribute => attribute.type);
}
let [position, status]: [Position, Status] = getAll(Position, Status);
【问题讨论】:
标签: typescript generics tuples inference