[英]Error when using a generic type with a constraint in Typescript - 2536
我有以下幾種類型:
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]?
由於FiltersKeys是從IFilterFields擴展的,因此它可以包含不同的鍵。 您可以使用
export type IFiltersState<FiltersKeys extends keyof IFilterFields> = {
[K in keyof IFilterFields]: IFilterFields[K]["defaultValue"]
}
我發現了我的錯誤。 由於FiltersKeys
已經是鍵/字符串的並集,因此[K in keyof IfilterFields]
IfilterFields的key中的[K in keyof IfilterFields]
有一個redundand keyof。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.