Próbuję zdefiniować obiekt z symbolem jako klucz, ponieważ MDN mówi:
Wartość symbolu można wykorzystać jako identyfikator właściwości obiektu [...]
Ale używając go jako typu dla właściwości klucz:
type obj = {
[key: symbol | string]: string
}
powoduje następujący błąd:
TS1023: Typ parametru podpisu indeksu musi być „ciągiem” lub „liczbą”.
nawet może być użyty jako indeks. Korzystam z najnowszej wersji maszynopisu ( v3.7.2
), powiązane pytania, które znalazłem:
- Maszynopis: destrukcja obiektu za pomocą symboli jako kluczy (używa rzeczywistej instancji symbolu, chcę ten typ
symbol
) - TypeScript: Parametr podpisu indeksu musi być „ciągiem” lub „liczbą” podczas próby użycia ciągu | numer
- ES6: destrukcja obiektu z symbolami jako kluczami (To nie może być rozwiązanie - używanie rzeczywistej instancji jako typu wydaje się trochę niewłaściwe, ponieważ każda instancja Symbol jest unikalna ...)
Przyjrzałem się również dokumentom symboli maszynopisu, ale pokazują one tylko, w jaki sposób są używane jako wartość, a nie jako typ.
Przykład:
const obj = {} as {
[key: number | symbol]: string // Won't work
};
const sym = Symbol('My symbol');
obj[sym] = 'Hi';
javascript
typescript
types
symbols
Szymon
źródło
źródło
symbol
? Może pokaż przykład, w jaki sposób chcesz używać swojegotype obj
- wątpię, aby wszystkie właściwości z kluczem symbolicznym byłystring
s.any
co jest złą praktyką).Map<Symbol,String>
mam rację, ale czy spróbowałeś użyć mapy, którą mamy, czy to by służyło celowi, który starasz się osiągnąćOdpowiedzi:
Niestety obecnie nie jest to możliwe w TypeScript. Jeśli musisz współpracować z niektórymi interfejsami API, które tego oczekują lub naprawdę chcesz używać symboli jako kluczy, możesz wykonać tę niezręczną wersję:
źródło