代码之家  ›  专栏  ›  技术社区  ›  Gary McGill

我可以用固定键创建地图吗?

  •  0
  • Gary McGill  · 技术社区  · 6 年前

    我需要创建一个类型来表示一组命名的开关值。我希望这个类型是不可变的,因为开关 名字 已修复,但仍允许切换 价值 需要改变。

    Map<string, boolean>

    我想用一个 ReadonlyMap<string, boolean> 但是,虽然这样可以防止添加或删除键,但也可以防止设置开关值:-)。

    是否有另一种类型允许我拥有一组固定的键,但值是可变的?

    当前位置我想补充一点,就是我不知道交换机的名称( Map

    2 回复  |  直到 6 年前
        1
  •  2
  •   jcalz    6 年前

    Map<string, boolean> (虽然当您的键是字符串时,一个普通的老JavaScript对象 {[k: string]: boolean}

    不知道编译时的键,但知道地图的用户 如果你了解他们,那么你只想使用 generic 对于键类型。

    因为您没有发布示例代码,所以我无法针对您的具体用例,所以我正在编造一些东西:

    // your code
    class MyMapHolder<K extends string> {
      map: Map<K, boolean>
      constructor(...keys: K[]) {
        this.map = new Map<K, boolean>();
        keys.forEach(k => this.map.set(k, false));
      }      
    }
    
    // user's code
    const mapHolder = new MyMapHolder("ape", "bee", "cat", "dog", "elk");
    mapHolder.map.set("dog", true); // okay
    mapHolder.map.set("fox", false); // error, "fox" is not assignable to parameter
    

    K constrained string . 但是代码的用户指定了一些键,在这一点上泛型类型用具体的值实例化。。。这会让用户知道他们是否试图使用无效密钥。

    这有意义吗?希望有帮助。祝你好运

        2
  •  1
  •   baao    6 年前

    class Foo {
        fixedKeyName1: boolean
        // ...
    }