microsoft / microsoft/TypeScript
error TS4058: Return type of exported function has or is using name '$SYM' from external module fileA but cannot be named
Personne n'a encore pris cette issue.
- 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
- 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.
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