如何在运行时以角度生成类型

时间:2019-01-22 16:29:32

标签: angular typescript dynamic types

我必须在运行时生成类型,因为类型可以更改。对于类型-我知道每个字段(属性)的名称及其类型。此类型的数据以键/值对列表的形式来自REST api。当我收到这些数据时,需要将其映射到正确的类型/类/模型,以便以后可以将这种类型的数组绑定到网格。

我看过带有动态键的界面,但是问题是我必须对键的名称进行硬编码。我还查看了打字稿中的“记录”类型,但在这里我也要为每个键设置值,我不能使用变量-我需要对其进行硬编码-确定,我可以尝试从我的键中构建键列表,但是如何在不进行硬编码的情况下为它分配一个值。

///这是我的功能,可以从待办事项数组中生成新类型的数组(比如说MYNEWTYPE) // Todo内部有一个TodoProperties列表,存储为键/值对 公共CreateNewArray(TodoList:Array):void {

TodoList.forEach((d)=> {

  d.ToDoPropertiesDto.forEach((p)=>{

        //TodoProperties is alist of key/value pair (for example [{"Name":"Owner","Value":"MrJay"},{"Name":"Occupation","Value":"Engineer"}])

        // What I want is for example  if p.Name=Owner then assign p.value to MYNEWTYPE.Owner



  });

});

}

预期结果是一个MYNEWTYPE数组,其中每个字段/属性都获取来自键/值对的值。问题在于,有一天他们可能想添加一组新的键/值对,因此我应该从此键/值对列表中创建新的类型

1 个答案:

答案 0 :(得分:0)

Javascript是一种非类型化语言。您可以在以下SO帖子中找到解释:Is JavaScript an untyped language?

仅在打字稿中输入文字即可帮助您在编译时对代码进行语义和完整性检查。

将代码编译为Javascript并运行后,就不再有任何键入信息。只要您要访问的键/值对存在,任何操作都将运行。

因此,就您而言,只要您知道自己在做什么就不必担心键入:请使用类型any。显然,那是您自己的事:取决于您自己是否弄错并访问不存在的字段,否则将导致运行时错误。您将没有类型系统可以指出您在代码中犯的任何错误。