microsoft / microsoft/TypeScript

error TS4058: Return type of exported function has or is using name '$SYM' from external module fileA but cannot be named

Ouverte
#54,964 1 commentaire 4 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Domain: Declaration Emit Help Wanted Possible Improvement
Langage dominant
Go
Étoiles
111k
Forks
14.4k
Merge moyen
1 j 19 h
PR mergées (30 j)
117

Description

Bug Report

🔎 Search Terms

cannot be named symbol
TS4058

🕗 Version & Regression Information
  • This changed between versions 4.7.4 and 5.2.0-dev.20230710
  • This is the behavior in every version I tried, and I reviewed the FAQ for entries about "cannot be named"
⏯ Playground Link

Two files involved, so can't make a playground link

💻 Code

declaration=true

// fileA.ts
export const $SYM = Symbol("$SYM");
export const OBJ = { [$SYM]: 42 };

// fileB.ts
import type { $SYM, OBJ } from "./fileA";
export function func(obj: typeof OBJ, sym: typeof $SYM) {
  return [obj, sym];
}
🙁 Actual behavior

Error: Return type of exported function has or is using name '$SYM' from external module "fileA" but cannot be named.

🙂 Expected behavior

The expectation was that it compiles. Because if I use a string constant literal instead of the symbol, it works.

P.S.
In version 4.7.4 it worked, BUT it worked incorrectly: it generated declarations like function func(obj: { [$SYM]: number }) without actually importing $SYM, so it treated $SYM as a string (I think it was a bug). Now that bug is fixed, but there is still no way to generate declarations for similar situations (and as you can see, importing $SYM explicitly doesn't help).

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par le repro à deux fichiers dans fileA.ts et fileB.ts, en utilisant declaration=true et les versions de TypeScript décrites dans le rapport. Suivez la génération de déclaration pour le type de retour de func exportée et le symbole importé. C’est terminé lorsque le repro se compile et émet des déclarations qui préservent correctement la référence au symbole sans TS4058.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
typescript
Domaine
compilers
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.