how to make a fix to be sure when we us typeguard here , payload should be boolean in this case ?
thanks
enum MSGTYPES {
a,b,c,d,e,f
}
type MessageTypeObject<T extends MSGTYPES, V> = { type: T; payload: V; };
// a messages Maps entries where we define enumerations data type
type MessageTypeMap =[
[[MSGTYPES.a, MSGTYPES.b, MSGTYPES.c], boolean],
[[MSGTYPES.d, MSGTYPES.e], string],
[[MSGTYPES.f], FormData],
]
type MessageType<T extends MSGTYPES[]> = {
[K in T[number]]: K extends MessageTypeMap[number][0][number] ? MessageTypeObject<K, MessageTypeMap[number][1]> : never;
} [T[number]];
type testmsg = [MSGTYPES.a, MSGTYPES.f]
function onMessage( messageType: MessageType<testmsg> ): void {
const { type, payload } = messageType;
if ( type === MSGTYPES.a ) {
payload; // should be boolean 🔴
}
}