TypeScript, определения типов и websockets / ws: как получить доступ к информации о событиях? - PullRequest
0 голосов
/ 28 мая 2018

Я думаю, что это больше общий вопрос об определениях TypeScript, но контекст, который я использую, связан с пакетом websockets / ws.

У меня есть некоторый код, определенный следующим образом:

import { LoggerInstance } from "winston";
import "ws";

export abstract class MyClass {
    private _logger: LoggerInstance;
    private _webSocket: WebSocket;

    constructor(logger: LoggerInstance webSocket: WebSocket) {
        this._logger = logger;

        this._webSocket = webSocket;
        this.configureWebSocket();
    }

    private configureWebSocket(): void {
        this._webSocket.addEventListener("open", (event: Event) => {
            this._logger.info("WebSocket connection opened");
        });

        this._webSocket.addEventListener("message", (event: MessageEvent) => {
            this._logger.debug("WebSocket message received");
        });

        this._webSocket.addEventListener("error", (event) => {
            this._logger.error("WebSocket error encountered");
        });

        this._webSocket.addEventListener("close", (event: CloseEvent) => {
            this._logger.info("WebSocket connection closed");
        });

    }
}

Но я хотел бы иметь возможность вывести само сообщение об ошибке - глядя на определение @ types / ws, я могувот такое определение:

addEventListener(method: 'error', cb?: (event: {error: any, message: any, type: string, target: WebSocket }) => void): void;

Однако я не уверен, как отформатировать мой код таким образом, чтобы были доступны такие свойства, как «тип» и «сообщение».

Я пытался передать их как параметры в мою анонимную функцию, например так:

this._webSocket.addEventListener("error", (event, message) => {

, но тогда TypeScript жалуется, что сигнатура функции не соответствует ожидаемой сигнатуре.

Если бы кто-нибудь мог объяснить, как я могу это сделать, или указать мне на какую-нибудь соответствующую документацию, я был бы благодарен.

Спасибо.

1 Ответ

0 голосов
/ 28 мая 2018

Я посмотрел тесты для определений типов после публикации этого вопроса (https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/ws/ws-tests.ts)

Кажется, что правильный способ импорта ws таков: import WebSocket = require("ws");. Как только я это сделаю, я тогдау меня есть возможность использования:

this._webSocket.on("error", (error: Error) => { ... });

или:

this._webSocket.addEventListener("error", (error) => { error.message... });

VS Код также начал правильно намекать мне свойства объекта простой ошибки, как только я изменил свой синтаксис импорта.

Я собираюсь разобраться, когда использовать другой синтаксис импорта в TypeScript, поскольку ясно, что я еще не совсем понимаю его полностью.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...