I have the following code(server):
import express from "express";
import socketio from "socket.io";
import http from "http";
const app = express();
const server = http.createServer(app);
const io = socketio(server);
server.listen(process.env.port || 3000, () => {
console.log(`App running on port ${process.env.port || 3000}`);
});
But i get an error on const io = socketio(server);
, It states:
This expression is not callable. Type 'typeof import("SOME_PATH/node_modules/socket.io/dist/index")' has no call signatures
What exactly is the problem here?
package.json:
"devDependencies": {
"@types/express": "^4.17.11",
"@types/node": "^14.14.27",
"@types/socket.io": "^2.1.13",
"nodemon": "^2.0.7",
"ts-node": "^9.1.1"
},
"dependencies": {
"express": "^4.17.1",
"socket.io": "^3.1.1",
"typescript": "^4.1.5"
}
But i get an error on const io = socketio (server);, It states: This expression is not callable. Type 'typeof import ("SOME_PATH/node_modules/socket.io/dist/index")' has no call signatures
As a side note, socket.io was rewritten in typescript, so you no longer need to have @types/socket.io. Not sure about that, but the problem seems to be in the way socket.io describe its own default export.
Welcome friends! In this tutorial, we are going to be looking at how you can build a websocket based server using both TypeScript and Socket.io. WebSockets are an awesome technology and I absolutely love playing around with them and creating real-time applications.
This expression is not callable. Type 'typeof import ("SOME_PATH/node_modules/socket.io/dist/index")' has no call signatures What exactly is the problem here?
The api changed in version 3. This issue here has some discussion.
The new equivalent of your example would be
import express from "express";
import { Server } from "socket.io";
import http from "http";
const app = express();
const server = http.createServer(app);
const io = new Server(server);
server.listen(process.env.port || 3000, () => {
console.log(`App running on port ${process.env.port || 3000}`);
});
As a side note, socket.io was rewritten in typescript, so you no longer need to have @types/socket.io.
Not sure about that, but the problem seems to be in the way socket.io describe its own default export.
I solved this by casting it as any
import io from 'socket.io';
const server = (io as any)(http);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With