ef00732685
- Made the use of `const` and `let` consistent - import required functions and types from 'react' instead of using the `React.` namespace. - Added `Expand` type, which can expand complex types to their "final" result. - Ensured that we use `as const` for DEFAULT_XXX_TAG where we used a string. So that we have the type of `div` instead of `string` for example. - Used `interface` over `type` where possible. I'm personally more of a `type` fan. But the TypeScript recommends `interfaces` where possible because they are faster, yield better error messages and so on.
21 lines
656 B
TypeScript
21 lines
656 B
TypeScript
export function match<TValue extends string | number = string, TReturnValue = unknown>(
|
|
value: TValue,
|
|
lookup: Record<TValue, TReturnValue | ((...args: any[]) => TReturnValue)>,
|
|
...args: any[]
|
|
): TReturnValue {
|
|
if (value in lookup) {
|
|
let returnValue = lookup[value]
|
|
return typeof returnValue === 'function' ? returnValue(...args) : returnValue
|
|
}
|
|
|
|
let error = new Error(
|
|
`Tried to handle "${value}" but there is no handler defined. Only defined handlers are: ${Object.keys(
|
|
lookup
|
|
)
|
|
.map(key => `"${key}"`)
|
|
.join(', ')}.`
|
|
)
|
|
if (Error.captureStackTrace) Error.captureStackTrace(error, match)
|
|
throw error
|
|
}
|