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

如何在typescript的for-in循环中强制转换索引变量?

  •  0
  • nachocab  · 技术社区  · 6 年前

    我有这样一个物体:

    const lettersAtIndex: {[index: string]: string[]} = {4: ['a', 'b'], 6: ['c', 'f']}
    

    我想循环一下:

    Object.keys(lettersAtIndex).forEach(index => {
        doSomething(lettersAtIndex[index]) // index expression is not of type number
        doSomething2(lettersAtIndex[index]) // index expression is not of type number
        doSomething3(lettersAtIndex[index]) // index expression is not of type number
    })
    

    推荐的铸造方法是什么 index 一个数字。我应该创建另一个变量吗?

    Object.keys(lettersAtIndex).forEach(index => {
        const numericIndex = Number(index)
        doSomething(lettersAtIndex[numericIndex])        
        doSomething2(lettersAtIndex[numericIndex])
        doSomething3(lettersAtIndex[numericIndex])
    })
    
    0 回复  |  直到 6 年前
        1
  •  1
  •   maxpaj    6 年前

    好像 Object.keys Object.keys<T> ). 但是,您可以映射 string[] 从返回 对象.键 Number forEach . 和你建议的差不多。

    Object.keys(obj)
        .map(Number)
        .forEach(index => {
            // index is a number here
        });
    
        2
  •  1
  •   Nguyen Phong Thien    6 年前

    Object.keys 总是返回一个字符串,因此,你的方式上面是好的。

    但就你而言,我认为 index

    Object.values(lettersAtIndex).forEach(val => {
        doSomething(val)        
        //...
    })
    

    Map

    const lettersAtIndex = new Map<number, string[]>([[4, ['a', 'b']], [6, ['c', 'f']]]);
    
    Array.from(lettersAtIndex.keys()).forEach((index) => {
        doSomething(lettersAtIndex[index]);
    });