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

如何使用数组作为常量在索引签名TypeScript中指定可能的索引?,typescript,types,Typescript,Types,我想制作一个数组,它将指定哪些字符串将索引对象内的属性,并且对象属性只包含函数 我的理解是,我可以从数组中创建联合类型: 我的工作案例是React reducer中的减速机操作说明,但可在其他地方使用: const InstructionsArray = [ 'HANDLE_BUTTON_CONVERT_INPUT', 'HANDLE_CHECKBOX_CONVERT_ON_INPUT', 'HANDLE_CHECKBOX_DISPLAY_TAGS', 'HAND

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

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

我的工作案例是React reducer中的减速机操作说明,但可在其他地方使用:

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 changersLabels = [
    'inventory',
    'quest'
] as const;
keyboardRouter(changers: {[key:typeof changersLabels[number]:Function]}) {

    //some stuff

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

const changersLabels = [
    'inventory',
    'quest'
] as const;
keyboardRouter(changers: {[key:typeof changersLabels[number]:Function]}) {

    //some stuff

}

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

看起来您只需要一个键盘,其中键的类型为changersLabels[number],属性都是函数:

映射类型看起来有点像具有的类型,但这仅适用于索引为string类型或number类型的情况。对于其他类型(如字符串文字的并集),需要使用in运算符映射类型

可以对其进行轻微重构,为密钥命名并使用内置:


看起来您只需要一个,其中键是typeof ChangerLabels[number],属性都是函数:

映射类型看起来有点像具有的类型,但这仅适用于索引为string类型或number类型的情况。对于其他类型(如字符串文字的并集),需要使用in运算符映射类型

可以对其进行轻微重构,为密钥命名并使用内置: