【发布时间】:2019-01-30 12:20:22
【问题描述】:
我有以下几种:
interface IFilterField <T extends FilterFieldValue > {
defaultValue: T
displayStr?: string
}
interface IFilterFields = {
costMax: IFilterField<number>
costMin: IFilterField<number>
.....
}>
当我尝试键入将在 filterField 及其值的类型之间链接的对象时,这有效:
export type IFiltersState<FiltersKeys extends keyof IFilterFields> = {
[K in keyof FiltersKeys]: IFilterFields["costMin"|"costMax"]["defaultValue"]
}
但这失败了:
export type IFiltersState<FiltersKeys extends keyof IFilterFields> = {
[K in keyof FiltersKeys]: IFilterFields[K]["defaultValue"]
}
尽管约束几乎相同。
错误:
[ts] Type 'K' cannot be used to index type 'IFilterFields'. [2536]
[ts] Type '"defaultValue"' cannot be used to index type 'IFilterFields[K]'. [2536]
为什么会出现这个错误?
如何实现映射类型的目的,它遵循以下原则:新类型 T2 具有 T1 类型的一些键,并且对于每个这样的键 typeof T1[key] 等于 typeof T2[key][SomeFieldName ]?
【问题讨论】:
标签: typescript