웹사이트 검색

typescript - 타입이 지정된 객체를 매핑하는 문제 | 호출 시그니처가 없는 타입의 표현식을 호출할 수 없습니다


저는 'containers'라는 객체가 있는데, 이 객체는 항상 모든 키에 같은 종류의 컴포넌트를 포함할 것입니다.

다음 코드는 예상대로 작동합니다

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'에는 호환 가능한 호출 서명이 없습니다.

보통 자바스크립트에서는 그냥 작동하기 때문에 저에게는 이상합니다.

여기 오류를 볼 수 있는 타입스크립트 플레이그라운드 링크가 있습니다

답변 #1

이걸 시도해 보세요:

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;
    }

}

사용:

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

그런 다음 이것을 반복하세요:

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

관련기사