Estou tentando definir um objeto com um símbolo como tipo de chave, já que o MDN diz:
Um valor de símbolo pode ser usado como um identificador para propriedades do objeto [...]
Mas usando-o como tipo para a propriedade-chave:
type obj = {
[key: symbol | string]: string
}
resulta no seguinte erro:
TS1023: Um tipo de parâmetro de assinatura de índice deve ser 'string' ou 'number'.
mesmo ele pode ser usado como tipo de índice. Estou usando a última versão datilografada ( v3.7.2
), perguntas relacionadas que encontrei:
- Texto datilografado: destruindo um objeto com símbolos como chaves (ele está usando uma instância real de um símbolo, eu quero o tipo
symbol
) - TypeScript: um parâmetro de assinatura de índice deve ser uma 'string' ou 'number' ao tentar usar a string | número
- ES6: destruindo um objeto com símbolos como chaves (Isso não pode ser uma solução - parece meio errado usar uma instância real como tipo, pois toda instância Symbol é única ...)
Também demos uma olhada nos documentos de símbolos datilografados, mas eles mostram apenas como é usado como valor, não como tipo.
Exemplo:
const obj = {} as {
[key: number | symbol]: string // Won't work
};
const sym = Symbol('My symbol');
obj[sym] = 'Hi';
javascript
typescript
types
symbols
Simon
fonte
fonte
symbol
? Talvez mostre um exemplo de como você deseja usar o seutype obj
- duvido que todas as propriedades com chave de símbolo sejamstring
s.any
que é uma má prática).Map<Symbol,String>
como temos Mapa, se isso iria servir o propósito de que você está tentando alcançarRespostas:
Infelizmente, isso não é possível no momento no TypeScript. Se você precisar interoperar com algumas APIs que esperam isso ou realmente desejam usar símbolos como chaves, é possível fazer esta versão complicada:
fonte