错误:无法使用数组

时间:2018-07-27 13:34:11

标签: typescript

我有一个数组,其中有一个对象:

const standardStories = [
{
    name: 'Executive Summary',
    navLink: 'standard-stories/executive-summary',
    cardIndex: 0,
    storyBoxes: [
        {
            name: 'Chart Box',
            values: commonStdStories.chartBoxValue,
            graphics: commonStdStories.chartBoxGraphic,
        },
        {
            name: 'Financial Chart',
            values: commonStdStories.financialChartValue,
            graphics: commonStdStories.pieChart,
        },
        {
            name: 'Info Progress Bar',
            values: commonStdStories.progressBarValue,
            graphics: commonStdStories.progressBarGraphic,
        },
    ],
},
{
    name: 'High Cost Med',
    navLink: 'standard-stories/hcc-med',
    cardIndex: 2,
    storyBoxes: [
        {
            name: 'Info Progress Bar',
            values: commonStdStories.progressBarValue,
            graphics: commonStdStories.progressBarGraphic,
        },
        {
            name: 'Chart Box',
            values: commonStdStories.chartBoxValue,
            graphics: commonStdStories.chartBoxGraphic,
        },
        {
            name: 'HCC Table',
            value: commonStdStories.hccTable,
        },
    ],
},
{
    name: 'High Cost Rx',
    navLink: 'standard-stories/hcc-rx',
    cardIndex: 3,
    storyBoxes: [
        {
            name: 'Info Progress Bar',
            values: commonStdStories.progressBarValue,
            graphics: commonStdStories.progressBarGraphic,
        },
        {
            name: 'Chart Box',
            values: commonStdStories.chartBoxValue,
            graphics: commonStdStories.chartBoxGraphic,
        },
        {
            name: 'HCC Table',
            value: commonStdStories.hccTable,
        },
    ],
},
]

还有更多,但您会明白。

我试图像这样使用storyBox:

standardStories.forEach(story => {
    **story.storyBoxes.forEach(storyBox => {})**
})

在粗体显示的地方是我出现错误[ts] Cannot invoke an expression whose type lacks a call signature的地方,只是想知道如何解决此问题,以便继续前进。理想情况下,我希望能够遍历每个故事,以检查每个故事的storyBox中概述的每个storyBox。

3 个答案:

答案 0 :(得分:1)

这取决于commonStdStories中属性的类型。如果storyBoxes内部属性的类型不一致,则storyBoxes的类型可能最终是数组的并集,您不能将其用作数组,因为方法最终是并集联合中每种类型的版本。

最简单的解决方案是根据我在问题中看到的内容为常量添加一个明确的类型,这将是一个版本:

interface IStory {

    name: string;
    navLink: string;
    cardIndex: number;
    storyBoxes: Array<{
        name: string;
        value?: string | number;
        values?: string| number; // Typo maybe ? do you want both value and values ?
        graphics?: string| number;
    }>;
}

Playground link

答案 1 :(得分:0)

因此,我通过将storyBoxes数组中的名称更改为boxName并使value成为values来解决此问题。

答案 2 :(得分:0)

在TypeScript 3.2中不再是这种情况。现在,如果一个工会的每个成员都可以被呼叫,那么工会本身也可以被呼叫。