gpt4 book ai didi

typescript - 如何使用数组作为 const 在索引签名 TypeScript 中指定可能的索引?

转载 作者:行者123 更新时间:2023-12-02 02:33:30 25 4
gpt4 key购买 nike

我想制作一个数组,它将指定哪些字符串将索引对象内的属性,并且该对象属性仅包含函数。

我所理解的是,我可以仅从数组创建联合类型:

我的工作案例是 React reducer 中的 reducer action(指令)(但它可以在其他地方使用):

const InstructionsArray = [
'HANDLE_BUTTON_CONVERT_INPUT',
'HANDLE_CHECKBOX_CONVERT_ON_INPUT',
'HANDLE_CHECKBOX_DISPLAY_TAGS',
'HANDLE_TEXTAREA_INPUT',
'HANDLE_RUNTIME'
] as const;

然后我有带有属性的类型对象:

instruction: typeof InstructionsArray[number]

当然,普通数组允许我们使用任何字符串作为索引,但由于我们将其转换为 const,它现在只允许我们在数组中指定的字符串。

我真正想要的是拥有一个对象,它将有一些属性名称为 string,所有属性的值都为 function。我只想指定那些属性名称 (string),但由于每个值都是一个 function,我不想指定它多次,所以它可以被视为理所当然。

当前代码如下所示:

const changersLabels = [
'inventory',
'quest'
] as const;

但是“相同”的方法不适用于这样的对象:

keyboardRouter(changers: {[key:typeof changersLabels[number]:Function]}) {

//some stuff

}

我做错了什么,这有可能吗?

最佳答案

看起来你只想要一个 mapped type其中键是 typeof changersLabels[number],属性都是 Function:

function keyboardRouter(changers: { [K in typeof changersLabels[number]]: Function }) {
changers.inventory // Function
changers.quest // Function
}

映射类型看起来有点像带有 an index signature 的类型,但这仅适用于索引类型为 stringnumber 的情况。对于字符串文字联合等其他类型,您需要使用 in 运算符的映射类型。

可以稍微重构一下,为您的 key 命名并使用内置的 Record utility type :

type ChangersLabels = typeof changersLabels[number];
function keyboardRouter2(changers: Record<ChangersLabels, Function>) {
changers.inventory // Function
changers.quest // Function
}

Playground link to code

关于typescript - 如何使用数组作为 const 在索引签名 TypeScript 中指定可能的索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64687975/

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