microsoft / microsoft/TypeScript

Anonymous Symbol Properties

Ouverte
#64,253 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Suggestion
Langage dominant
Go
Étoiles
111k
Forks
14.3k
Merge moyen
2 j 4 h
PR mergées (30 j)
132

Description

### 🔍 Search Terms

"anonymous symbol properties"
"anonymous unique symbol"
"inline unique symbol"
"unique symbol property key"
"computed property unique symbol"
"symbol branding"

### ✅ Viability Checklist

- [x] This wouldn't be a breaking change in existing TypeScript/JavaScript code
- [x] This wouldn't change the runtime behavior of existing JavaScript code
- [x] This could be implemented without emitting different JS based on the types of the expressions
- [x] This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, new syntax sugar for JS, etc.)
- [x] This isn't a request to add a new utility type: https://github.com/microsoft/TypeScript/wiki/No-New-Utility-Types
- [x] This feature would agree with the rest of our Design Goals: https://github.com/Microsoft/TypeScript/wiki/TypeScript-Design-Goals

### ⭐ Suggestion

Allow `unique symbol` keys to be declared inline at the property declaration site.

### 📃 Motivating Example

**Current code:**
```ts
declare const brand: unique symbol;
type UserId = string & { readonly [brand]: "UserId" };
```

**Proposed code:**
```ts
type UserId = string & { readonly [brand: unique symbol]: "UserId" };
```

Each inline declaration would create a fresh symbol identity, equivalent to declaring a separate `unique symbol` and using it as the computed property key.

This is useful when a `unique symbol` property key is needed only once and does not need to be referenced independently. Common examples include phantom properties used for branded or refined types.

### 💻 Use Cases

1. What do you want to use this for?
Declaring single-use `unique symbol` property keys inline, particularly for phantom properties used by branded or refined types.

2. What shortcomings exist with current approaches?
The current approach requires introducing a value-level declaration solely to provide a unique identity for a type-level property key. For single-use symbol keys, this creates an otherwise unnecessary binding in the surrounding scope.

3. What workarounds are you using in the meantime?
Declaring a separate `unique symbol` value and using it as a computed property key.

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 les déclarations de types actuelles et proposées dans l’issue, puis suivez la manière dont TypeScript gère les clés de propriété calculées et les identités de unique symbol. Le travail est considéré comme terminé lorsque les clés de propriété inline de type unique symbol sont acceptées, que chaque déclaration reçoit une nouvelle identité et que la sortie JavaScript à l’exécution est préservée ; l’issue ne nomme aucun fichier d’implémentation ni aucun test.

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

Évaluation

Stack technique
typescript
Domaine
compilers
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
Active
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.