【发布时间】:2017-05-11 02:55:40
【问题描述】:
我正在尝试创建一个泛型类型,它从一个类型中获取属性名称和属性类型,并使用它们来创建一个可区分的联合类型。例如:
type FooBar = {
foo: string;
bar: number;
};
将映射到:
type FooBarPair = {
key: "foo",
value: string
} | {
key: "bar",
value: number
}
我最初的尝试是:
type Pairs<T> = {
[TKey in keyof T]: {
key: TKey;
value: T[TKey];
};
};
type Pair<T> = Pairs<T>[keyof T];
但是当我尝试将其应用于上述类型时:
let pair: Pair<FooBar> = {
key: "foo",
value: 3
};
我预计会出现编译错误,但没有。当我检查Pair<FooBar> 的类型时,我发现它等同于:
{
key: "foo" | "bar";
value: string | number;
}
我认为这可能是打字稿中的一个错误,但我想看看是否有其他方法可以实现这一点。
【问题讨论】:
标签: typescript