通过值数组定义接口



如果我有一个带有输入道具的常量和一个返回输入id及其默认值的函数,如下所示:

const Inputs = [{label: "myInput1", id: "myId1"}, {label: "myInput2" , id: "myId2" }]

const getInputValues = () => Inputs.reduce( (acc, item) => ({...acc, [item.id] : 123  }), {} )

如何在TypeScript中定义getInputValues的返回类型?

代码

我能想到的唯一方法是对Inputs常量使用const断言:

const Inputs = [
{label: "myInput1", id: "myId1"},
{label: "myInput2", id: "myId2"},
] as const;
type InputIds = typeof Inputs[number]['id'];
function getInputValues(): Record<InputIds, number> {
return Inputs.reduce((acc, item) => {
return {...acc, [item.id]: 123};
}, {} as Partial<Record<InputIds, number>>) as Record<InputIds, number>;
}

您所能期望的最好的是Record<string, number>

const getInputValues = ():Record<string,number> => 
Inputs.reduce( (acc, item) => ({...acc, [item.id] : 123  }), {})

为了获得更好的类型安全性,您可以选择Record<string, number | undefined>,这将强制您对访问的任何值进行类型检查。

最新更新