【发布时间】:2018-06-27 13:25:30
【问题描述】:
有没有办法像这样转变受歧视的工会:
type Something = {
type: 'mode';
values: 'first' | 'second';
} | {
type: 'part';
values: 'upper' | 'lower';
};
进入
{
mode: 'first' | 'second';
part: 'upper' | 'lower';
}
使用一些泛型类型?
到目前为止,我尝试过这样的事情:
type MyUnion = {
type: string;
values: string;
};
type DiscUnionToObject<U extends MyUnion> = {
[V in U['type']]: U['values']
}
但是当我执行DiscUnionToObject<Something> 时,它会产生
{
mode: 'first' | 'second' | 'upper' | 'lower';
part: 'first' | 'second' | 'upper' | 'lower';
}
当type 设置为mode 时,我无法找到一种方法让泛型类型“理解”'upper' | 'lower' 不是Something 的一部分。
【问题讨论】:
-
我很好奇这个用例是什么?
-
@Aaron 我正在尝试从
styled-theming库中为theme函数编写一个类型,在此过程中我偶然发现了这个问题。我不确定它是否可以帮助我达到预期的效果,但我也很好奇是否有人可以做这样的事情。
标签: typescript types typescript2.0