TS品牌的字符串作为对象的键

时间:2019-05-07 10:17:59

标签: typescript static-typing

想象一下,我有带字符串标识符的Foo类。

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

我尝试确保使用a brand enum对其进行静态键入。

enum FooIdBranding {}
type FooId = string & FooIdBranding;

所以现在,我的目标是特定的对象,键是FooId,值是Foo

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

不幸的是,它不起作用:

  

TS1023:索引签名参数类型必须为“字符串”或“数字”

我认为Record是我的解决方案,但它也不起作用。

type FooCache = Record<FooId, Foo>;

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

TS 7017:元素隐式地具有“ any”类型,因为类型Record<FooId, Foo>没有索引签名

TypeScript中是否有解决此问题的正确方法?

0 个答案:

没有答案