我需要创建一个类型来表示一组命名的开关值 . 我希望这种类型在交换机名称固定的意义上是不可变的,但仍然允许更改开关值 .
我目前正在使用 Map<string, boolean>
. 但是,这意味着我的类型的用户可以添加其他键值,或删除现有键值,我想阻止它 .
我想过使用 ReadonlyMap<string, boolean>
但是虽然这可以防止添加或删除密钥,但它也会阻止设置开关值:-) .
是否有另一种类型可以让我拥有一组固定的键,但可变值?
EDIT :我想在问题中添加的是我在编译时不知道开关名称( Map
键) . 我在寻找的类型是我可以在函数声明等中使用的类型,它表示数据的键/值性质,但也表示固定的键集不变性 .
2 回答
就在这里 . 这就是 class 的作用 .
这取决于你的意思"I don't know the keys at compile time" . 如果你的 Map 用户甚至比
Map<string, boolean>
更胜一筹(尽管当你的键是字符串时,像{[k: string]: boolean}
这样的普通的JavaScript对象更轻量级且具有相同的行为) .但是,如果您在编译时不知道键,但 Map 的用户确实知道它们,那么您只想使用generic作为键类型 .
由于您没有发布任何示例代码,因此我无法针对您的确切用例,因此我正在编写内容:
如您所见,您不知道用户将选择哪些键,因此您只需使用
K
constrained来string
. 但是代码的用户指定了一些键,此时泛型类型使用具体值进行实例化...这样可以让用户知道他们是否尝试使用无效键 .这有道理吗?希望有所帮助 . 祝好运 .