Skip to content

TS: Exported variable X has or is using name Y from external module Z but cannot be named.ts(4023) #5307

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
JK-Effects opened this issue Feb 26, 2025 · 2 comments

Comments

@JK-Effects
Copy link

Describe the bug
There are many type errors shown within the editor (VS code) that result from the use of the ‘socket’ type.
Building the application does not throw any TypeErrors.

I use the client in a Pinia store in Vue.
As soon as the Socket type is used within the store definition, the editor shows an error.
When using the variable connection via imports, this error extends to the entire files where the variable is used.

Is this due to the use with Pinia or Vue or the defined types in the socket-io client?

Image

To Reproduce

Socket.IO client version: ^4.8.1

"vue": "^3.4.29",
"vue-router": "^4.3.3"
"pinia": "^2.3.0",
"vite": "^5.3.1",

"@tsconfig/node20": "^20.1.4",
"@types/eslint": "~9.6.0",
"@types/node": "^20.14.5",

Client

import { defineStore } from "pinia";
import { io, type Socket } from "socket.io-client";

export const useConnectionStore = defineStore("connection", {
  state: () => {
    return {
      connection: undefined as undefined | Socket,
    };
  },
  getters: {
    connectionStatus: (state) => !!state.connection,
  },
  actions: {
    connectClient(): void {
      if (this.connectionStatus) return;
      this.connection?.disconnect();
      this.connection = io("<server url>", {
        reconnection: true,
        reconnectionDelayMax: 10000,
        auth: (cb) => {
          cb({ token: localStorage.getItem("accessToken") });
        },
      });

      this.connection.on("connect", () => {
        console.log("success");
      });
      this.connection.on("connect_error", (err) => {
        console.log(err);
      });
      this.connection.on("disconnecting", () => {
        this.connection?.disconnect();
      });
      this.connection.on("disconnect", () => {
        this.$reset();
      });
      this.connection.on("error", (msg: string) => {
        console.log(msg);
      });
    },
    disconnectClient(): void {
      this.connection?.disconnect();
    },
  },
});

Expected behavior
No type errors should be displayed in the editor.

Platform:

  • OS: Win10

Additional context
Shown Type Errors:

Exported variable 'useConnectionStore' has or is using name 'Cookie' from external module "<path>/node_modules/engine.io-client/build/esm/globals.node" but cannot be named.ts(4023)
Exported variable 'useConnectionStore' has or is using name 'HandshakeData' from external module "<path>/node_modules/engine.io-client/build/esm/socket" but cannot be named.ts(4023)
Exported variable 'useConnectionStore' has or is using name 'ManagerReservedEvents' from external module "<path>/node_modules/socket.io-client/build/esm/manager" but cannot be named.ts(4023)
Exported variable 'useConnectionStore' has or is using name 'SocketReservedEvents' from external module "<path>/node_modules/engine.io-client/build/esm/socket" but cannot be named.ts(4023)
Exported variable 'useConnectionStore' has or is using name 'SocketReservedEvents' from external module "<path>/node_modules/socket.io-client/build/esm/socket" but cannot be named.ts(4023)
Exported variable 'useConnectionStore' has or is using name 'TransportReservedEvents' from external module "<path>/node_modules/engine.io-client/build/esm/transport" but cannot be named.ts(4023)
Exported variable 'useConnectionStore' has or is using name 'WriteOptions' from external module "<path>/node_modules/engine.io-client/build/esm/socket" but cannot be named.ts(4023)
@JK-Effects JK-Effects added the to triage Waiting to be triaged by a member of the team label Feb 26, 2025
@darrachequesne
Copy link
Member

Hi! Have you found the culprit?

The failing types (Cookie, HandshakeData, ...) are all unexported interfaces, maybe that could explain the problem? Which version of the typescript compiler are you using?

@darrachequesne darrachequesne added needs investigation and removed to triage Waiting to be triaged by a member of the team labels Feb 27, 2025
@JK-Effects
Copy link
Author

Hi,
I am using typscript "~5.4.0" with vue-tsc "^2.0.21".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants