扩大歧视工会

问题描述

是否有可能使用mappend /条件类型来转换此DU

type MyDU =
| {kind: 'foo'}
| {kind: 'bar'}

type Transformed = DUTransformer<MyDU>

这样我们就可以得到以下结果

type Transformed =
| {kind: 'foo',foo: boolean}
| {kind: 'bar',bar: boolean}

解决方法

是的,因为TypeScript将distribute mapped types over a union

type MyDU =
| {kind: 'foo'}
| {kind: 'bar'}

type Kinded<T extends string> = { kind: T }

type DUTransformer<T> = T extends Kinded<infer K> ? T & {[K1 in K]: boolean} : never

type Transformed = DUTransformer<MyDU>

Transformed的类型是:

type Transformed = ({
    kind: 'foo';
} & {
    foo: boolean;
}) | ({
    kind: 'bar';
} & {
    bar: boolean;
})

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...