I am trying to write a small library where I want to add type safety to the following object:
export const ErrorCodeMap: Record<string, [string, number]> = {
NOT_FOUND: ['1001', 222],
ALREADY_EXISTS: ['1002', 111],
}
Now what I want to do is to get a type-safe list of the keys of the object ErrorCodeMap.
If I do the following
export type ErrorCode = keyof typeof ErrorCodeMap;
the type of ErrorCode is equal to string. I would like it to equal 'NOT_FOUND' | 'ALREADY_EXISTS'.
I tried to use the as const syntax but I think I am a bit off here.
Is there any way to solve this WITHOUT removing the Record<string, [string, number]> definition and thus retaining type safety on the object definition?
This approach gives you a suitable type...
export const ERROR_MAP = {
NOT_FOUND: ['1001', 222],
ALREADY_EXISTS: ['1002', 111],
} as const satisfies Record<string, readonly [string, number]>
// hover to reveal type ErrorCode = "NOT_FOUND" | "ALREADY_EXISTS"
type ErrorCode = keyof typeof ERROR_MAP;
Typescript Playground
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With