Я пытаюсь определить объект с символом как тип ключа, так как MDN говорит:
Значение символа может использоваться в качестве идентификатора для свойств объекта [...]
Но используя его как тип для свойства ключа:
type obj = {
[key: symbol | string]: string
}
приводит к следующей ошибке:
TS1023: тип параметра подписи индекса должен быть либо «строка», либо «число».
даже он может быть использован как индексный тип. Я использую последнюю версию машинописного текста ( v3.7.2
), связанные вопросы, которые я нашел:
- Typescript: деструктурирование объекта с символами в качестве ключей (он использует фактический экземпляр Symbol, мне нужен тип
symbol
) - TypeScript: параметр подписи индекса должен быть «строкой» или «числом» при попытке использовать строку | число
- ES6: разрушение объекта с символами в качестве ключей (это не может быть решением - кажется неправильным использовать фактический экземпляр в качестве типа, поскольку каждый экземпляр Symbol уникален ...)
Я также взглянул на документы с символами машинописного текста, но они показывают только то, как они используются как значение, а не как тип.
Пример:
const obj = {} as {
[key: number | symbol]: string // Won't work
};
const sym = Symbol('My symbol');
obj[sym] = 'Hi';
javascript
typescript
types
symbols
Саймон
источник
источник
symbol
? Может быть, показать пример того, как вы хотите использовать своиtype obj
- я сомневаюсь, что все свойстваstring
с символьным ключом будут s.any
что является плохой практикой).Map<Symbol,String>
Карту, как у нас, если это послужит цели того, чего вы пытаетесь достичьОтветы:
К сожалению, в настоящее время это невозможно в TypeScript. Если вам нужно взаимодействовать с некоторыми API, которые ожидают этого или действительно хотят использовать символы в качестве ключей, вы можете сделать эту неловкую версию:
источник