代码之家  ›  专栏  ›  技术社区  ›  Chris

带有字符串键和由接口定义的内容的typescript类型对象

  •  1
  • Chris  · 技术社区  · 6 年前

    我的数据具有以下结构:

    groups = {
        someGroupName: {
            total: 30,
            count: 3,
            average: 10
        },
        someOtherGroupName: {
            total: 60,
            count: 3,
            average: 20
        }
    }
    

    我可以为套料零件编写接口:

    interface Stats {
        total: number,
        count: number,
        average: number
    }
    

    但是,如何为整个组设置类型呢?我不知道有什么团体要来。我只知道它将是一个groupname作为键,stats对象作为值。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Titian Cernicova-Dragomir    6 年前

    您可以使用索引签名告诉typescript对象可以通过任何字符串进行索引,但对象中的所有值都属于特定类型:

    interface Stats {
        total: number,
        count: number,
        average: number
    }
    
    interface Groups {
        [name: string] : Stats
    }
    
    let groups: Groups = {
        someGroupName: {
            total: 30,
            count: 3,
            average: 10
        },
        someOtherGroupName: {
            total: 60,
            count: 3,
            average: 20
        }
    }
    
    let someGroupName = groups['someGroupName'] //someGroup is Stats
    groups['someGroupName'] = 0 // invalid 0 is not of type Stats