- Nek,
Hello tout le monde,
J’ai un soucis avec TypeScript et la gestion des types. J’ai l’impression d’être face à un problème très simple et pourtant il me semble vraiment complexe en terme de résolution des types etc.
Commençons par le code:
interface MessageInterface {
_type: string;
}
interface ErrorMessage extends MessageInterface {
error: string;
}
// C'est pour l'exemple mais imaginez 30 types différents ici
export enum MessageType {
CONNECT,
ERROR,
CHAT
}
const messagesCallbacks: Map<MessageType, (message: MessageInterface) => void> = new Map();
function listenOn (messageType: MessageType, callback: (message: MessageInterface) => void): void {
messagesCallbacks.set(messageType, callback);
}
listenOn(MessageType.ERROR, (message: ErrorMessage) => {
console.error(message.error);
});
function receiveMessage(message: string): void {
const decoded = JSON.parse(message);
if (decoded._type === MessageType.ERROR && messagesCallbacks.has(MessageType.ERROR)) {
messagesCallbacks.get(MessageType.ERROR)!(decoded);
}
}
Donc j’ai deux questions:
- Est-ce que vous avez une solution simple à ce problème de typage ?
- Est-ce que j’ai un problème de design et il est possible de faire quelque-chose de similaire différemment en TS ? (après tout, c’est loin d’être mon langage de prédilection donc je peux rater qqch) Cela en prenant en compte le fait que j’ai 30 types de messages différents ofc.
Merci d’avance pour vos avis
+0
-0