javascript - Definer grensesnitt ved hjelp av et array av verdier
Hvis jeg har en konstant med input-egenskaper og en funksjon som returnerer input-IDene og standardverdien, slik:
const Inputs = [{label: "myInput1", id: "myId1"}, {label: "myInput2" , id: "myId2" }]
const getInputValues = () => Inputs.reduce( (acc, item) => ({...acc, [item.id] : 123 }), {} )
Hvordan kan jeg definere returtypen til getInputValues i TypeScript?
Kode
Svar #1
Den eneste måten jeg kunne komme på er å bruke const-assertion for din Inputs-konstant:
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>;
}
Svar #2
Det beste du kan håpe på her er Record<string, number>.
const getInputValues = ():Record<string,number> =>
Inputs.reduce( (acc, item) => ({...acc, [item.id] : 123 }), {})
For enda bedre typesikkerhet kan du velge Record<string, number | undefined> som vil tvinge deg til å type-sjekke alle verdier du får tilgang til.
