【问题标题】:How to declare an associative array with user-defined key?如何使用用户定义的键声明关联数组?
【发布时间】:2021-03-05 07:32:02
【问题描述】:

我的尝试:

class Key {
    foo: string = "";
}

var dict = new Map<Key, number>();
dict[new Key()] = 1; // <-- error here

我收到一个错误:

Type 'Key' 不能用作索引类型。

我也考虑过使用一个普通的 JS “对象”(它的功能是一个关联数组),但它们只能由字符串索引。

我也试过Record

class Key {
    foo: string = "";
}

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

得到:

类型'Key'不满足约束'string |号码 |象征'。 类型“键”不能分配给类型“符号”。

我也尝试过索引签名:

class Key {
    foo: string = "";
}

interface MyDict {
    [index: Key]: number; // <-- error here
}

var dict = new MyDict();
dict[new Key()] = 1;

得到:

索引签名参数类型必须是“字符串”或“数字”。

那么,如何声明一个带有用户自定义键的关联数组?

【问题讨论】:

    标签: typescript associative-array


    【解决方案1】:

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

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

    同样,要从Map 中获取值,您可以使用get 方法:

    value = dict.get(someKey);
    

    【讨论】:

      猜你喜欢
      • 2019-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-24
      相关资源
      最近更新 更多