typescript - Onko mahdollista käyttää enum-arvoja objektin avaimen arvona tyypin määrittelyssä?
Minulla on enum HealthPlanStatus, joka luotiin enum HealthPlanStatus-luokalla. Lopuksi haluaisin käyttää enumin avaimia ja arvoja luodakseni paitsi status-avaimia type IHealthPlanResponse-tyypille myös title-arvon enumin arvoina.
export enum HealthPlanStatus {
Todo = 'To-Do',
InProgress = 'Working on it',
}
export type IHealthPlanResponse = {
[status in keyof typeof HealthPlanStatus]: {
title: string;
};
};
Se antaa minulle tiukan rakenteen, jossa minulla on status-avain enum-avaimena (Todo, InProgress...):
type IHealthPlanResponse = {
readonly Todo: {
title: string;
};
readonly InProgress: {
title: string;
};
}
Haluaisin myös, että minulla olisi title-tyyppi enum-arvoina. Esimerkiksi:
type IHealthPlanResponse = {
readonly Todo: {
title: 'To-Do';
};
readonly InProgress: {
title: 'Working on it';
};
}
Vastaus #1
Sopiiko tämä sinulle?
export enum HealthPlanStatus {
Todo = 'To-Do',
InProgress = 'Working on it',
}
export type IHealthPlanResponse = {
readonly [status in keyof typeof HealthPlanStatus]: {
title: (typeof HealthPlanStatus)[status];
};
};
let t: IHealthPlanResponse = {} as any
const status = t.InProgress.title // -> HealthPlanStatus.InProgress
Jos et pidä siitä, että näet enum 'key' tässä ja haluat käyttää string-kirjainsanaa tyyppinä, voit vaihtaa sen tähän:
export type IHealthPlanResponse = {
readonly [status in keyof typeof HealthPlanStatus]: {
title: `${(typeof HealthPlanStatus)[status]}`;
};
};
let t: IHealthPlanResponse = {} as any
const status = t.InProgress.title // -> 'Working on it'
Vastaus #2
Upea lähestymistapa käyttää enumia yhden tyypin arvossa.
export enum selectedYearTypeValues {
'currentYear',
'All'
}
type Props = {
selectedYear: keyof typeof selectedYearTypeValues;
setSelectedYear: (value: keyof typeof selectedYearTypeValues) => void;
}
