首页 文章

映射打字对象的问题|无法调用类型缺少调用签名的表达式

提问于
浏览
1

我有一个名为“容器”的对象,它总是会在每个键上包含相同类型的组件 .

以下代码按预期工作

interface Dictionary<T> {
    [key: string]: T;
}

interface GameContainer {
    zIndex: number;
}

interface Game {
    containers: Dictionary<GameContainer>;
}

const game: Game = {
    containers: {
        a: { zIndex: 2 },
        b: { zIndex: 4 }
    }
}

尝试映射“容器”时问题到了

const something = game.containers.map(container => {
    console.log(container)
})

尝试这个后我得到了错误

无法调用类型缺少调用签名的表达式 . 类型'GameContainer'没有兼容的呼叫签名 .

这对我来说很奇怪,因为在普通的javascript中这只是起作用 .

Here is a link to a typescript playground所以你可以看到错误

1 回答

  • 0

    试试这个:

    declare module namespace {
    
        export interface A {
            zIndex: number;
        }
    
        export interface B {
            zIndex: number;
        }
    
        export interface Containers {
            a: A;
            b: B;
        }
    
        export interface RootObject {
            containers: Containers;
        }
    
    }
    

    Using:

    const game: RootObject = {
        containers: {
            a: { zIndex: 2 },
            b: { zIndex: 4 }
        }
    }
    

    然后迭代这个:

    Object.keys(game.containers).map(function(key, index) {
       console.log(game.containers[key]);
    })
    

相关问题