如何:接受只读类型的泛型?

西得里亚斯

在清单上采取行动

type DoSomethingWith<L extends any[]> = L

我想要做的就是这样

const keys = {
  a: ['a', 'b', 'c'] as ['a', 'b', 'c'],
  d: ['d', 'e', 'f'] as ['d', 'e', 'f'],
}

type Keys = typeof keys

type KeysWithSomething = {
  [K in keyof Keys]: DoSomethingWith<Keys[K]>
}

但是为了避免冗余(在可能更长的列表上),我希望能够这样写:

const keys = {
  a: ['a', 'b', 'c'] as const,
  d: ['d', 'e', 'f'] as const,
}

type Keys = typeof keys

type DoSomethingWith<L extends any[]> = L

type KeyKinds = {
  [K in keyof Keys]: DoSomethingWith<Keys[K]>
                                  // ^^^^^^^: Type '{ a: readonly ["a", "b", "c"]; d: readonly ["d", "e", "f"]; }[K]' does not satisfy the constraint 'any[]'.
}

错误是我尝试传递一个只读类型DoSomething,期望该类型具有通用列表类型(any[]),这是一种指定DoSomething它也应接受只读元素的方式吗?

福特04

是的,您可以readonly在通用约束中使用修饰符:

type DoSomethingWith<L extends readonly any[]> = L
//                             ^ add this

或者你去倒过来,取下readonly标志,已经缩小后keysas const

type Mutable<T> = T extends object ? { -readonly [K in keyof T]: Mutable<T[K]> } : T

用您的类型进行测试(游乐场):

type T1 = Mutable<Keys> // { a: ["a", "b", "c"]; d: ["d", "e", "f"]; }

type KeyKinds = {
    [K in keyof Keys]: DoSomethingWith<Mutable<Keys[K]>> // compiles now
}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何强制Java接受相同类型的泛型参数

来自分类Dev

如何模拟接受类类型的泛型方法?

来自分类Dev

类型不接受泛型中的参数

来自分类Dev

如何创建一个接受泛型类型作为关联类型的枚举

来自分类Dev

如何在Java中将泛型类型绑定为仅接受Integer和Double

来自分类Dev

限制Scala泛型的类型以接受任何类型的Int

来自分类Dev

如何使泛型类型始终成为泛型类型列表?

来自分类Dev

仅接受Rust泛型中的原始类型

来自分类Dev

如何为泛型类指定泛型集合类型?

来自分类Dev

如何创建泛型方法以返回泛型类型

来自分类Dev

如何使用泛型返回泛型类的类类型?

来自分类Dev

使泛型类的函数仅接受具有相同泛型类型但受更多约束的参数

来自分类Dev

为什么接受引用类型的泛型方法不接受可空类型作为参数?

来自分类Dev

如何通过泛型类型实例化?

来自分类Dev

如何确定非对象泛型的类型?

来自分类Dev

如何使用类型的辅助类泛型

来自分类Dev

如何遍历泛型类型的列表

来自分类Dev

如何从泛型类型调用重载方法

来自分类Dev

如何获得嵌套的泛型类型

来自分类Dev

如何使泛型类型的构造函数

来自分类Dev

如何从对象类型定义泛型?

来自分类Dev

如何使用泛型实现类型安全?

来自分类Dev

如何返回泛型类型的类

来自分类Dev

如何定义不是类的泛型类型?

来自分类Dev

如何匹配Scala泛型类型?

来自分类Dev

如何获取嵌套的泛型类型

来自分类Dev

如何获得继承的泛型类型

来自分类Dev

如何从复合泛型类型检索值?

来自分类Dev

如何实例化泛型类型