인프런 커뮤니티 질문&답변
DMList 소켓 연결 중에 타입스크립트 에러
작성
·
198
0
const DMList: FC = () => {
const { workspace } = useParams<{ workspace?: string }>();
const {
data: userData,
error,
revalidate,
mutate,
} = useSWR<IUser>("/api/users", fetcher, {
dedupingInterval: 2000, // 2초
});
const { data: memberData } = useSWR<IUserWithOnline[]>(
userData ? `/api/workspaces/${workspace}/members` : null,
fetcher
);
const [socket] = useSocket(workspace);
const [channelCollapse, setChannelCollapse] = useState(false);
const [countList, setCountList] = useState<{ [key: string]: number }>({});
const [onlineList, setOnlineList] = useState<number[]>([]);
useSocket(workspace)에서
TS2345: Argument of type 'string | undefined' is not assignable to parameter of type 'string'.
Type 'undefined' is not assignable to type 'string'.
에러가 뜨는데 workspace?: string으로 명시해주었는데 왜 이런 에러가 발생하는건가요? 깃허브에서 똑같이 코드를 가져왔는데도 같은 에러가 발생해서 어떤 점이 문제인지 도무지 알 수가 없어 여쭈어봅니다..ㅠㅠㅠ
답변 1
0
재미있는 말미잘
질문자
import io from "socket.io-client";
import React, { useCallback } from "react";
//ts에서 빈배열이나 빈객체에는 타이핑을 해줘야 한다!!!!!!
const sockets: { [key: string]: SocketIOClient.Socket } = {};
const backUrl = `http://localhost:3095`;
const useSocket = (
workspace: string
): [SocketIOClient.Socket | undefined, () => void] => {
const disconnect = useCallback(() => {
sockets[workspace].disconnect;
delete sockets[workspace];
}, [workspace]);
if (!workspace) return [undefined, disconnect];
sockets[workspace] = io.connect(`${backUrl}/ws-${workspace}`, {
transports: ["websocket"], //http연결을 요청(polling) 하지않고 바로 웹소켓만 하용하도록 명시
});
// const socket = io.connect(`${backUrl}`);
//보내기
// sockets[workspace].emit("hello", "world");
// //받기
// sockets[workspace].on("message", (data: any) => {
// console.log(data);
// });
// sockets[workspace].on("data", (data: any) => {
// console.log(data);
// });
// sockets[workspace].on("onlineList", (data: any) => {
// console.log(data);
// });
return [sockets[workspace], disconnect];
};
export default useSocket;




