TS фирменная строка как ключ объекта - PullRequest
1 голос
/ 07 мая 2019

Представьте, что у меня есть класс Foo со строковым идентификатором.

class Foo {
    id = '123' as FooId;
}

Я пытаюсь обеспечить его статическую типизацию, используя перечисление бренда .

enum FooIdBranding {}
type FooId = string & FooIdBranding;

Итак, моя цель - конкретный объект, ключ которого - FooId, а значение - Foo.

type fooCache = { [key: FooId]: Foo };

К сожалению, это не работает:

TS1023: тип параметра подписи индекса должен быть 'string' или 'number'

Я думал, что Record - это мое решение,но тоже не работает.

type FooCache = Record<FooId, Foo>;

({} as FooCache)['123' as FooId] = new Foo();

TS 7017: Элемент неявно имеет тип 'any', потому что тип Record<FooId, Foo> не имеет подписи индекса

IsЕсть ли правильный способ решения этой проблемы в TypeScript?

...