前提
NextJs13 +TypeScript + Socket.io でWebSocket通信を試しています。
以下のURLを参考に実装~動作確認まで行うことができたのですが、
https://blog.logrocket.com/implementing-websocket-communication-next-js/
socketHandlerの引数にしているresの型がわからず、仕方なくanyにしています。
TypeScript
1import type { NextApiRequest } from 'next' 2import { Server } from 'Socket.IO' 3 4export default function socketHandler(req: NextApiRequest, res: any) { 5 if (res.socket.server.io) { 6 console.log('Socket is already running') 7 } else { 8 console.log('Socket is initializing') 9 const io = new Server(res.socket.server) 10 res.socket.server.io = io 11 12 io.on('connection', (socket) => { 13 socket.on('input-change', (msg) => { 14 socket.broadcast.emit('update-input', msg) 15 }) 16 }) 17 } 18 res.end() 19}
実現したいこと
anyにせず正しい型を指定することは可能でしょうか?
また、TypeScriptを触り始めたのですが、nodejsのライブラリなどを使用していると、
ライブラリで扱っている型がわからず、
「とりあえず、anyにして回避する。」というケースが、
結構、発生しています。
何か調べ方などは、あるのでしょうか?
試したこと
試しに、
res: any を res: NextApiResponse に変更してみたところ
VS-Code上で
「プロパティ 'server' は型 'Socket' に存在しません。ts(2339)」
と表示されました。
ただ、npm run dev して、動作を確認してみても特に問題なく動作している様に見えるので、
VS-Code上だけの問題?なのかとも思います。
どちらにせよ、エラー表示のまま使用したり、「とりあえずany」は、
ダメな手法な気がしますので、なんとかならないものか?と思っています。
補足情報(FW/ツールのバージョンなど)
nodejs v16.18.0
nodejsパッケージは以下
"next": "13.0.2",
"react": "18.2.0",
"react-dom": "18.2.0",
"socket.io": "^4.5.3",
"socket.io-client": "^4.5.3",
"typescript": "4.8.4"
windows11 のVS-Code上で試しています。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/12/06 07:57