【问题标题】:Typescript interface with unknown number of generic properties which all should be typed as booleans具有未知数量的通用属性的 Typescript 接口,所有这些属性都应输入为布尔值
【发布时间】:2021-09-22 04:31:38
【问题描述】:

我想创建一个 typescript 接口,其中包含未知数量的通用属性,所有这些属性都应该输入为布尔值。如果我想创建一个带有属性 'foo' 和通用值的接口,我会这样做:

export interface Foo<T> {
  foo: T;
}

因为我想做的基本上相反,所以我尝试了

export interface booleansMap<T> {
  T: boolean;
}

但我得到了

'T' is defined but never used.(@typescript-eslint/no-unused-vars)

来自 eslint

在文档中找不到这个(可能没有使用正确的命名法进行谷歌搜索) - 所以我想知道是否有人理解并可以解释如何制作这样一个界面

它应该能够处理类似的事情:

{
  foo: false,
  bar: true,
  baz: false
}

{
  foo: true,
}

或具有任意数量属性的任何其他对象,只要所有值都是布尔值...

【问题讨论】:

  • 举例说明您认为booleansMap 的泛型类型参数T 可能是什么类型,以及您希望返回的类型是什么。
  • @Psidom 就是这样 - 谢谢!如果你想回答我就除外

标签: angular typescript


【解决方案1】:

您不需要泛型。您可以只使用[K: string] 指定一个通用键:

type booleanMap = { [K: string]: boolean }

带接口定义:

interface booleansMap {
  [K: string]: boolean;
}

或者使用Record:

type booleanMap = Record<string, boolean>

Playground

【讨论】:

  • 您能否再添加一个带有索引界面的示例?赞成
  • 嗯,在某种程度上,“K”是通用的……我猜它只是“key”的通用
  • @captain-yossarian 当然,刚刚添加
  • @HelloWorld 功能上是的,但不确定我是否会称它为泛型,因为它不是可用于创建新类型的参数。
猜你喜欢
  • 2021-09-26
  • 2021-03-08
  • 2019-04-03
  • 2016-11-10
  • 2019-07-14
  • 1970-01-01
  • 2020-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多