J'essaie de définir un objet avec un symbole comme type de clé depuis MDN dit:
Une valeur de symbole peut être utilisée comme identifiant pour les propriétés des objets [...]
Mais en l'utilisant comme type pour la propriété clé:
type obj = {
[key: symbol | string]: string
}
entraîne l'erreur suivante:
TS1023: Un type de paramètre de signature d'index doit être «chaîne» ou «nombre».
même il peut être utilisé comme type d'index. J'utilise la dernière version dactylographiée ( v3.7.2
), des questions connexes que j'ai trouvées:
- Typographie: déstructurer un objet avec des symboles comme clés (il utilise une instance réelle d'un symbole, je veux le type
symbol
) - TypeScript: un paramètre de signature d'index doit être une «chaîne» ou un «nombre» lorsque vous essayez d'utiliser une chaîne | nombre
- ES6: déstructurer un objet avec des symboles comme clés (cela ne peut pas être une solution - il semble un peu mal d'utiliser une instance réelle comme type puisque chaque instance de Symbol est unique ...)
J'ai également jeté un coup d'œil aux documents sur les symboles dactylographiés, mais ils montrent uniquement comment ils sont utilisés comme valeur, pas comme type.
Exemple:
const obj = {} as {
[key: number | symbol]: string // Won't work
};
const sym = Symbol('My symbol');
obj[sym] = 'Hi';
symbol
? Peut-être montrez-vous un exemple de la façon dont vous voulez utiliser votretype obj
- je doute que toutes les propriétés à clé symbolique soientstring
s.any
ce qui est une mauvaise pratique).Map<Symbol,String>
j'ai raison, mais avez-vous essayé d'utiliser comme nous avons la carte, si cela pouvait servir l'objectif de ce que vous essayez de réaliserRéponses:
Malheureusement, cela n'est pas possible pour le moment en TypeScript. Si vous devez interagir avec certaines API qui attendent cela ou veulent vraiment utiliser des symboles comme clés, vous pouvez faire cette version maladroite:
la source