簡體   English   中英

在Typescript中使用具有約束的泛型類型時出錯-2536

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM