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';
javascript
typescript
types
symbols
Simon
quelle
quelle
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.any
was eine schlechte Praxis ist).Map<Symbol,String>
Antworten:
Leider ist dies derzeit in TypeScript nicht möglich. Wenn Sie mit einigen APIs zusammenarbeiten müssen, die dies erwarten oder wirklich Symbole als Schlüssel verwenden möchten, können Sie diese umständliche Version ausführen:
quelle