TypeScript hashmap/字典接口

新手上路,请多包涵

我是使用 TypeScript 的新手,我正在尝试实现 hashmap/dictionary 接口。到目前为止我有

export interface IHash {
    [details: string] : string;
}

我在理解这种语法的确切含义时遇到了一些麻烦。如果我要做 var x : IHash = {}; 我将如何添加/访问数据?

原文由 mysticalstick 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

就像一个普通的 js 对象:

 let myhash: IHash = {};

myhash["somestring"] = "value"; //set

let value = myhash["somestring"]; //get

你正在做两件事 [indexer: string] : string

  • 告诉 TypeScript 对象可以有任何基于字符串的键
  • 对于所有键条目,值必须是字符串类型。

在此处输入图像描述

您可以使用 [key: string]: any; 制作具有显式类型字段的通用字典

在此处输入图像描述

例如 age 必须是 number ,而 name 必须是字符串 - 两者都是必需的。任何隐式字段都可以是任何类型的值。

作为替代方案,有一个 Map 类:

 let map = new Map<object, string>();

let key = new Object();

map.set(key, "value");
map.get(key); // return "value"

这允许您将任何对象 _实例_(不仅仅是数字/字符串)作为键。

虽然它相对较新,但如果您针对旧系统,您可能需要对其进行 polyfill。

原文由 Meirion Hughes 发布,翻译遵循 CC BY-SA 4.0 许可协议

最简单正确的方法是使用 Record type Record

 const myVar : Record<string, string> = {
   key1: 'val1',
   key2: 'val2',
}

原文由 aWebDeveloper 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Stack Overflow 翻译
子站问答
访问
宣传栏