强类型的打字稿集合

Posted

技术标签:

【中文标题】强类型的打字稿集合【英文标题】: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 的范式吗?

这个范式叫什么?

有更好的方法吗?

【问题讨论】:

TypeScript Objects as Dictionary types as in C#的可能重复 【参考方案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#

【讨论】:

谢谢!界面将完美运行,从现在开始我将不得不使用它。

以上是关于强类型的打字稿集合的主要内容,如果未能解决你的问题,请参考以下文章

打字稿不正确的分配/映射到强类型对象[关闭]

强类型 GraphQL 查询

字符串枚举类似于打字稿中的类型[重复]

打字稿中具有通用键的对象

创建自定义类型的强类型化集合

“弱打字”语言的优势