不能使用 WebSocket 接口代替 WebSocket?
WebSocket interface cannot be used in place of WebSocket?
我正在按照指南尝试使用 ws and Express 4 with NodeJS and TypeScript. Problem is that the guide I'm following (found here: https://morioh.com/p/3b302785a62f 设置 WebSocket.Server
) 似乎它已过时或因为提供的代码不起作用。
我正在尝试使用扩展的 websocket 对象来跟踪活动连接。它看起来像这样:
interface ExtWebSocket extends WebSocket {
isAlive: boolean;
}
现在执行此操作,如教程中的代码所示,出现错误:
setInterval(() => {
wss.clients.forEach((ws: ExtWebSocket) => {
if (!ws.isAlive) return ws.terminate();
ws.isAlive = false;
ws.ping(null, false, true);
});
}, 10000);
错误指出我无法在 forEach
循环中使用 ExtWebSocket,但我不知道为什么?
这是因为您不能 'de-narrow' 将 WebSocket 转换为 ExtWebSocket,因为它扩展了 WebSocket。如果您有 ExtWebSocket,那么您可以将其缩小为 WebSocket,但反之则不行。
这是关于此主题的打字稿手册的 link:https://www.typescriptlang.org/docs/handbook/2/narrowing.html
我正在按照指南尝试使用 ws and Express 4 with NodeJS and TypeScript. Problem is that the guide I'm following (found here: https://morioh.com/p/3b302785a62f 设置 WebSocket.Server
) 似乎它已过时或因为提供的代码不起作用。
我正在尝试使用扩展的 websocket 对象来跟踪活动连接。它看起来像这样:
interface ExtWebSocket extends WebSocket {
isAlive: boolean;
}
现在执行此操作,如教程中的代码所示,出现错误:
setInterval(() => {
wss.clients.forEach((ws: ExtWebSocket) => {
if (!ws.isAlive) return ws.terminate();
ws.isAlive = false;
ws.ping(null, false, true);
});
}, 10000);
错误指出我无法在 forEach
循环中使用 ExtWebSocket,但我不知道为什么?
这是因为您不能 'de-narrow' 将 WebSocket 转换为 ExtWebSocket,因为它扩展了 WebSocket。如果您有 ExtWebSocket,那么您可以将其缩小为 WebSocket,但反之则不行。
这是关于此主题的打字稿手册的 link:https://www.typescriptlang.org/docs/handbook/2/narrowing.html