My preferred way of modelling this would probably be something like role:"admin" | "regular" | "logged-out"
or type Role = "admin" | "regular"; role:Role|null
depending on whether being logged out is a state on the same level as being a logged-in (non-)admin. In a language like Rust, enumRole {Admin, Regular}
instead of just using strings.
I wouldn’t consider performance here unless it clearly mattered, certainly not enough to use role: number,
which is just about the least type-safe solution possible. Perhaps role:typeof ADMIN | typeof REGULAR | typeof LOGGED_OUT
with appropriately defined constants might be okay, though.
Disclaimer: neither a professional programmer nor someone who regularly writes TypeScript as of now.
My preferred way of modelling this would probably be something like
role: "admin" | "regular" | "logged-out"
or
type Role = "admin" | "regular";
role: Role | null
depending on whether being logged out is a state on the same level as being a logged-in (non-)admin. In a language like Rust,
enum Role {Admin, Regular}
instead of just using strings.
I wouldn’t consider performance here unless it clearly mattered, certainly not enough to use
role: number
,which is just about the least type-safe solution possible. Perhaps
role: typeof ADMIN | typeof REGULAR | typeof LOGGED_OUT
with appropriately defined constants might be okay, though.
Disclaimer: neither a professional programmer nor someone who regularly writes TypeScript as of now.