Estoy tratando de definir un objeto con un símbolo como tipo de clave ya que MDN dice:
Se puede usar un valor de símbolo como identificador para las propiedades [...] del objeto
Pero usándolo como tipo para la propiedad clave:
type obj = {
[key: symbol | string]: string
}
da como resultado el siguiente error:
TS1023: un tipo de parámetro de firma de índice debe ser 'string' o 'number'.
incluso se puede usar como tipo índice. Estoy usando la última versión mecanografiada ( v3.7.2
), preguntas relacionadas que he encontrado:
- Mecanografiado: desestructurando un objeto con símbolos como claves (está usando una instancia real de un Símbolo, quiero el tipo
symbol
) - TypeScript: un parámetro de firma de índice debe ser una 'cadena' o 'número' cuando se trata de usar una cadena | número
- ES6: desestructurar un objeto con símbolos como claves (Eso no puede ser una solución, parece un poco incorrecto usar una instancia real como tipo ya que cada instancia de Symbol es única ...)
También he echado un vistazo a los documentos de símbolos mecanografiados, pero solo muestran cómo se usa como valor, no como tipo.
Ejemplo:
const obj = {} as {
[key: number | symbol]: string // Won't work
};
const sym = Symbol('My symbol');
obj[sym] = 'Hi';
javascript
typescript
types
symbols
Simón
fuente
fuente
symbol
? Tal vez muestre un ejemplo de cómo desea usar sutype obj
- Dudo que todas las propiedades con clave de símbolo seanstring
s.any
cual es una mala práctica).Map<Symbol,String>
como tenemos Map? Si eso serviría para lo que estás tratando de lograrRespuestas:
Desafortunadamente, esto no es posible en este momento en TypeScript. Si tiene que interactuar con algunas API que esperan esto o realmente quieren usar símbolos como claves, puede hacer esta versión incómoda:
fuente