TypeScript type breakage under pnpm / preserveSymlinks=true due to extending Emitter from another package
Les mainteneurs répondent en général sous 2 jours
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 35/100
- Type d'issue
- Fonctionnalité
- Clarté
- Plutôt claire
- Activité
- À l'abandon
- Stack technique
- typescript
- Domaine
- api, developer-experience
Piste de recherche
Commencez par l’exemple de socket.io-client/index.ts et la déclaration de Socket, puis suivez la manière dont @socket.io/component-emitter est importé avec preserveSymlinks=true. Reproduisez le problème dans une configuration pnpm, npm link ou monorepo et comparez les approches proposées pour l’identité des types. C’est terminé lorsque Socket conserve ses types on et emit lorsqu’il est lié par un symlink.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Is your feature request related to a problem? Please describe.
When using socket.io-client in a symlinked setup (such as pnpm + preserveSymlinks=true or local linking via npm link), TypeScript loses several instance methods (on, emit, etc.) on the Socket class.
This happens because Socket extends the Emitter class from the @socket.io/component-emitter package:
import { Emitter } from "@socket.io/component-emitter";
export class Socket extends Emitter { ... }
Under preserveSymlinks=true, there can be multiple physical copies of @socket.io/component-emitter, resulting in distinct module identities for TypeScript.
As a result, Socket no longer appears to implement the correct emitter API.
This affects:
- pnpm users (the default node_modules structure is symlink-based)
- anyone linking socket.io-client locally (e.g. pnpm link, npm link, or monorepo setups)
Describe the solution you'd like
One of the following would make the types robust against symlinked environments:
- Re-export the emitter types from socket.io-client to unify identity.
- Use composition instead of inheritance for emitter behavior.
- Define an internal interface for the emitter API instead of importing the external class.
Example of a minimal re-export solution:
// socket.io-client/index.ts
import { Emitter } from "@socket.io/component-emitter";
export { Emitter }; // re-export canonical symbol
export class Socket extends Emitter { ... }
- Langage dominant
- TypeScript
- Étoiles
- 63.2k
- Forks
- 10.2k
- Merge moyen
- 1 j 23 h
- PR mergées (30 j)
- 4
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de socketio/socket.io
-
Raise Engine.IO minimum to 6.6.10 for published security fixesPeut-être pris @harshit-exe-dev l’a pris il y a 27 jours. Ouverte
Difficulté 1/5 1-3 heures Accessibilité débutants 78/100
Les mainteneurs répondent en général sous 2 jours
-
Can't set response headers in Server.handleUpgradePeut-être pris @MsfPablo l’a pris il y a 88 jours. Ouvertequestion
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
socketio/socket.io#5497 · 2 commentaires ·
Les mainteneurs répondent en général sous 2 jours
-
WebTransport ignores query parameters in URLPeut-être pris @cyphercodes l’a pris il y a 176 jours. Ouverteneeds major release question
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
socketio/socket.io#5496 · 3 commentaires ·
Les mainteneurs répondent en général sous 2 jours
-
cleanupEmptyChildNamespaces releases a child namespace while a socket is in its middleware, and the cleanup unregisters a newer namespace by namePeut-être pris @Jeremiah-D l’a pris il y a 4 jours. Ouverte
Difficulté 3/5 1-2 jours Accessibilité débutants 54/100
Les mainteneurs répondent en général sous 2 jours
-
Direct Sockets APIOuverteenhancement
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 20/100
Les mainteneurs répondent en général sous 2 jours
Toutes les issues de socketio/socket.io
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
prime-radiant-inc/evener#5901 ·
Les mainteneurs répondent en général sous 1 jour
-
bug needs-triage
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
Les mainteneurs répondent en général sous 1 jour
-
Bug: Batcher binds the texture that opens a new batch twice (one draw call per element with maxBatchableTextures = 1)Peut-être pris @darzarzycki l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 77/100
Les mainteneurs répondent en général sous 2 jours
-
area:study-data p2-high ready-for-agent type:chore
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
fderuiter/deruiter.dev#3706 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
nicobailon/pi-subagents#3242 ·
Les mainteneurs répondent en général sous 1 jour