在Typescript中,如何允许类型具有指向该类型的递归值的泛型的所有键?

阿德里安·阿基森

现在我有这样的东西,其中“ any”可以充当通用的“ V”

interface Validation<V> {
  $isValid: boolean
  $isValidating: boolean
  $value: V
  [prop: string]: boolean | V | Validation<V>
}

我想做的是用V中的任何字符串键K替换字符串索引类型,这将返回一个Sub Validation接口。

interface Validation<V> {
  $isValid: boolean
  $isValidating: boolean
  $value: V
  [K extends Extract<keyof V, string>]: Validation<V[K]>
}

这显然是行不通的,并且想知道是否可以实现类似的目标。

费奥多尔

是。这是怎么做的

type Validation<V> = {
    [K in Extract<keyof V, string>]: Validation<V[K]>
} & {
    $isValid: boolean
    $isValidating: boolean
    $value: V
}
  1. 您应该使用映射类型,因此您应该编写K in ...

    该语法类似于带有for .. in内部标记索引的语法分为三个部分:

    • 类型变量K,它依次绑定到每个属性。

    • 字符串文字联合键,其中包含要迭代的属性的名称。

    • 属性的结果类型。
  2. 要向dd附加属性,请使用交集,因为不可能直接向映射类型添加附加属性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用泛型提取特定类型的所有值?

我可以在F#中表达具有类型约束的泛型类型的递归关系吗?

具有泛型的TypeScript对象文字类型断言

typescript:具有基本类型约束的泛型类型

如何在流中定义具有指定类型的所有字段可选的泛型类型

Swift 4中具有不同类型的递归泛型结构

TypeScript:如何创建类型或接口,该类型或接口是具有n个键之一或字符串的对象?

Typescript:具有泛型类型的函数在返回时是否在泛型对象中强制执行?

具有递归,条件和匹配键的TypeScript泛型

具有泛型的TypeScript接口函数类型

如何编写具有TypeScript可扩展的约束的泛型类型

如何在C#中收集具有泛型类型的静态类的所有“实例”?

每个项目的键之间具有相同泛型的Typescript数组式类型

在TypeScript中,如何获取具有多个类型参数的方法中的泛型类型参数?

Typescript中具有泛型的子类型约束

TypeScript泛型:React中具有联合类型的道具

TypeScript中具有泛型的递归对象文字

Typescript从具有泛型类型的对象索引调用函数

具有泛型和谓词的Typescript数组原型,并允许推断类型

类中具有2个泛型类型的方法,其中1个泛型类型

具有类型依赖参数的 TypeScript 泛型方法

有一个方法的泛型类型取决于 TypeScript 中类的泛型类型

如何仅收集类型中的键,该类型的对象具有某些特定键作为 Typescript 接口中的值?

如何拥有符合具有关联值的协议的泛型类型的实例或返回类型

如何将动态类型传递给在 Scala 中已经具有泛型类型的方法

TypeScript 中由泛型类型组成的对象(类型递归)

如何根据字符串值检查泛型类型映射器是否具有键

我如何让 TypeScript 保证泛型类型具有实现特定方法的属性?

如何获得具有递归泛型类型的后代名称的联合?