【问题标题】:Convert "keyof GenericType" to string将“keyof GenericType”转换为字符串
【发布时间】:2020-06-02 04:21:26
【问题描述】:

我正在尝试编写这样的界面:

interface IGFilter<T> {
  [key: keyof T]: GQuery | IGFilter<T>,
  _NOT?: GQuery
}

但是我不断收到错误消息:An index signature parameter type must be either 'string' or 'number'.。为什么是这样?如果键只能是字符串或数字,那么为什么它认为keyof T 不是字符串或数字? keyof Type 不应该总是产生字符串或数字吗?

制作包含传入的通用接口类型的所有属性的接口的正确方法是什么?

【问题讨论】:

    标签: typescript


    【解决方案1】:

    我想你正在寻找这个:

    type IGFilter<T extends object> = {
      [K in keyof T]: GQuery | IGFilter<T>
    } & {
      _NOT?: GQuery;
    }
    

    要点:

    • 通过执行T extends objectT 限制为object 类型
    • 要遍历泛型类型的键,请使用映射类型:{ [K in keyof T]: ... }
    • 使用索引签名(如{ [key: string]: Foo })时,所有右侧属性必须符合Foo 类型。如果您想混合不同类型的属性,请使用类型别名并将其与另一种类型相交(根据我的解决方案)。
    • keyof T 可以是以下三种情况之一:stringnumbersymbol

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-21
      • 2019-10-10
      • 1970-01-01
      • 2019-01-05
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多