gpt4 book ai didi

typescript - Make 函数参数只接受来自变量对象的键

转载 作者:行者123 更新时间:2023-12-05 03:26:55 25 4
gpt4 key购买 nike

我有一个定义了值类型的对象:

type Type = { [key: string]: ValueType }

const variable: Type = {
key1: valueType,
key2: valueType,
key3: valueType,
}

我有一个函数 func,我只想接受带有 variable 键值的字符串:

func('key1')     // OK
func('key2') // OK
func('key3') // OK
func('keyother') // Error
func(3) // Error

这就是我在为 func 制作类型时所做的:

type FuncType = (param: keyof typeof variable) => any
const func: FuncType = ...

但我只能实现一个:

  • 输入变量的值

  • 输入funcparam只接受variable的key

两者都不是。

  • 如果我输入变量的值const变量:Type = {paramstring 输入,我可以将任何字符串传递给 func 调用,这是错误的
  • 如果我没有为 variable 的值 const 变量键入:Type = {func 现在键入 param 正确,但它使 variable 接受任何值。

我可以考虑的另一种方法是使用键列表 ([key1, key2, ...]) 预定义 Type。但我不想维护同一事物的两个列表。如果不这样做,我怎么能同时实现这两个目标。

Typescript playground对于这个问题,里面有一些注释可以更清楚地描述问题。

最佳答案

您必须使用仅验证类型的辅助函数。

const makeType = <T extends Type = Type>(obj: T) => obj

const variable = makeType({
key1: 0,
key2: 0,
key3: 0,
})

Playground

更新:TypeScript 4.9 将使这成为可能 satisfies

Announcing TypeScript 4.9 Beta

const variable = {
key1: valueType,
key2: valueType,
key3: valueType,
} satisfies Record<string, ValueType>

关于typescript - Make 函数参数只接受来自变量对象的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71581951/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com