【发布时间】:2019-01-27 22:04:16
【问题描述】:
在映射中使用联合类型时,我正在尝试使用映射类型来提供更多类型安全性。当使用属性类型(例如['value'])作为键的类型(K)时,似乎没有办法在键/值之间提供类型安全。
我想避免手动创建一个独特的模型来实现这一点。
代码:
interface IAction { value: string; }
type ActionMapper<A extends IAction> = {
[K in A['value']]: A;
}
interface IActionOne { value: 'action_one' }
interface IActionTwo { value: 'action_two' }
type Actions = IActionOne | IActionTwo;
const reducerMap: ActionMapper<Actions> = {
action_one: { value: 'action_one' },
action_two: { value: 'action_one' }, // expecting this line to fail
}
我已经注释了我预计会失败的行。
我觉得我应该能够利用密钥 (K in) 来提供正确的类型作为值。但是,我目前使用A,它提供了IAction 实现,其中value 的类型为string - 我想避免这种情况。
这在当前版本的 TypeScript 中是否可行?
【问题讨论】:
标签: typescript types discriminated-union union-types mapped-types