강동현

타입 정비

import { UserData } from "../user/types";
/**
* 방 리스트에서 사용됩니다.
*/
......@@ -19,3 +17,7 @@ export interface RoomInfo {
maxUsers: number;
users: UserData[];
}
export interface UserData {
username: string;
}
......
import { RoomDescription, RoomInfo } from "./dataType";
// 서버로 들어오는 메세지 타입을 정의합니다.
// 'result' 속성은 서버 요청 결과에만 포함되는 특별한 속성입니다.
export interface ServerInboundMessageMap {
......@@ -8,25 +10,13 @@ export interface ServerInboundMessageMap {
// 방 목록을 요청합니다.
roomList: {
result: {
uuid: string;
name: string;
currentUsers: number;
maxUsers: number;
}[];
result: RoomDescription[];
};
// 방에 접속합니다.
joinRoom: {
uuid: string;
result: {
uuid: string;
name: string;
maxUsers: number;
users: {
username: string;
}[];
};
result: RoomInfo;
};
// 방에서 나갑니다.
......@@ -131,8 +121,16 @@ export interface ServerOutboundMessageMap {
};
}
export interface ServerResponse<T> {
export type ServerInboundMessage<Key extends keyof ServerInboundMessageMap> =
Omit<ServerInboundMessageMap[Key], "result">;
export interface ServerResponse<Key extends keyof ServerInboundMessageMap> {
ok: boolean;
reason?: string;
result?: T;
result?: "result" extends keyof ServerInboundMessageMap[Key]
? ServerInboundMessageMap[Key]["result"]
: never;
}
export type ServerOutboundMessage<Key extends keyof ServerOutboundMessageMap> =
ServerOutboundMessageMap[Key];
......
export interface UserData {
username: string;
}