【问题标题】:Strongly typed typescript collections强类型的打字稿集合
【发布时间】:2016-12-08 06:27:22
【问题描述】:

我正在尝试在打字稿中使用“集合”(这种范式实际上叫什么?)并对其进行强类型化。在javascript中我会写这样的东西。

var array = [1,2,3,4];
var collection = {};

for(var x in array){
  collection['item-'+x] = x;
}

我有一个对象,我使用 collection[name] 语法添加/删除元素。

这很好,因为我不需要关心索引。 现在在打字稿中,当我创建一个数组时,我可以声明它并给它一个类型。

let array: string[] = [];

这如何等同于这个集合语法,例如我有一个这样的集合。

var days = {};

days[moment().day('monday')] = new dayType('Monday');
days[moment().day('tuesday')] = new dayType('Tuesday');

这很好用,但是如果我访问我的集合 days[moment().day('monday')].Name,我不知道这实际上是我的 dayType 类还是只是一个带有 Name 属性的对象。与属性名称相同。我可以添加 days['July']: = false; 就好了,即使这在我的对象上下文中没有意义。

这只是一个不适合 typeScript 的范式吗?

这个范式叫什么?

有更好的方法吗?

【问题讨论】:

标签: javascript types typescript


【解决方案1】:

您在此处使用的结构看起来像字典。请尝试以下操作:

var days : { [key: string]: dayType; } = {};

days[moment().day('monday')] = new dayType('Monday');

您也可以使用接口进行速记:

interface dayDictionary {
    [key: string]: dayType;
}

var days: dayDictionary = { };

见:TypeScript Objects as Dictionary types as in C#

【讨论】:

  • 谢谢!界面将完美运行,从现在开始我将不得不使用它。
猜你喜欢
  • 2022-01-13
  • 2017-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-06
  • 2015-11-06
  • 2017-05-18
  • 2021-06-24
相关资源
最近更新 更多