代码之家  ›  专栏  ›  技术社区  ›  Stefan Monov

如何使用用户定义键声明关联数组?

  •  0
  • Stefan Monov  · 技术社区  · 4 年前

    我的尝试:

    class Key {
        foo: string = "";
    }
    
    var dict = new Map<Key, number>();
    dict[new Key()] = 1; // <-- error here
    

    我出错了:

    类型“Key”不能用作索引类型。

    我还考虑过使用一个普通的JS“object”(它的功能是一个关联数组),但是这些只能通过字符串来索引。

    我也试过了 Record :

    class Key {
        foo: string = "";
    }
    
    var dict : Record<Key, number> = {}; // <-- error here
    dict[new Key()] = 1;
    

    得到了:

    类型“Key”不满足约束“string | number | symbol”。

    我还尝试了索引签名:

    class Key {
        foo: string = "";
    }
    
    interface MyDict {
        [index: Key]: number; // <-- error here
    }
    
    var dict = new MyDict();
    dict[new Key()] = 1;
    

    索引签名参数类型必须是“string”或“number”。

    那么,如何使用用户定义的键声明关联数组?

    1 回复  |  直到 4 年前
        1
  •  1
  •   T.J. Crowder    4 年前

    Map ,你不用 theMap[key] = value (用于设置对象属性),可以使用 set 方法:

    dict.set(new Key(), 1);
    

    类似地,从 地图 ,您使用 get 方法:

    value = dict.get(someKey);