我有一组接口如下:
interface Foo {
key: "fooKeyType",
value: "fooValueType",
}
interface Bar {
key: "barKeyType",
value: "barValueType",
}
interface Baz {
key: "bazKeyType",
value: "bazValueType",
}
type FooBarBaz = Foo | Bar | Baz;
type FooBarBazKey = FooBarBaz["key"];
type FooBarBazValue = FooBarBaz["value"];
其中 *keyType
总是const字符串(因此它们是有效键),但 *valueType
只是可能是实际类型(例如数字,日期,自定义类等)的替身 .
我想将这些接口转换为映射键 - >值的单一类型映射,如下所示:
/* Can I generate this from the above? */
type FooBarBazMap = {
fooKeyType: "fooValueType",
barKeyType: "barValueType",
bazKeyType: "bazValueType",
}
有没有办法用映射类型做到这一点?映射类型似乎不允许您引用当前索引类型,只是类型作为整体,这意味着您不能将来自同一接口的字段绑定在一起 .
1 回答
是的 . 这一切归结为转变这种类型:
......对此:
理想情况下,我们想输入这样的内容:
但是打字稿编译器会对我们大喊“[ts]类型参数'key'有一个循环约束 . ”,这是真的,但不会阻止我们,因为我们有通用参数默认值!
我们现在要做的就是为Foo,Bar,Baz声明交集类型:
验证它是否有效:
请注意,通用参数默认值需要TypeScript版本> = 2.3