Ich versuche, ein Objekt mit einem Symbol als Schlüsseltyp zu definieren, da MDN Folgendes sagt:
Ein Symbolwert kann als Kennung für Objekteigenschaften verwendet werden [...]
Verwenden Sie es jedoch als Typ für die Schlüsseleigenschaft:
type obj = {
[key: symbol | string]: string
}
führt zu folgendem Fehler:
TS1023: Ein Indexsignaturparametertyp muss entweder 'string' oder 'number' sein.
sogar es kann als Indextyp verwendet werden. Ich verwende die neueste Typoskript-Version ( v3.7.2
). Verwandte Fragen, die ich gefunden habe:
- Typoskript: Zerstörung eines Objekts mit Symbolen als Schlüssel (Er verwendet eine tatsächliche Instanz eines Symbols, ich möchte den Typ
symbol
) - TypeScript: Ein Indexsignaturparameter muss eine 'Zeichenfolge' oder 'Zahl' sein, wenn Sie versuchen, Zeichenfolge | zu verwenden Nummer
- ES6: Zerstörung eines Objekts mit Symbolen als Schlüssel (Das kann keine Lösung sein - es scheint irgendwie falsch, eine tatsächliche Instanz als Typ zu verwenden, da jede Symbolinstanz eindeutig ist ...)
Ich habe mir auch die Typoskript-Symboldokumente angesehen aber sie zeigen nur, wie sie als Wert und nicht als Typ verwendet werden.
Beispiel:
const obj = {} as {
[key: number | symbol]: string // Won't work
};
const sym = Symbol('My symbol');
obj[sym] = 'Hi';
any
was eine schlechte Praxis ist).
Map<Symbol,String>
symbol
? Zeigen Sie vielleicht ein Beispiel dafür, wie Sie Ihre verwenden möchtentype obj
- ich bezweifle, dass alle Eigenschaften mit Symbolschlüsselstring
s sein werden.