打字稿:如何为这样的动态对象定义接口

时间:2016-08-21 18:49:19

标签: javascript typescript

假设我有一个函数,它将此对象作为参数之一:

{
    section: "main",
    sectionColor: "#0072c6",
    favIcon: "default",
    libraries: {
        value: "librariesFiles",
        type: "jsIncludes"
    },
    components: {
        value: "comoponentFiles",
        type: "jsIncludes"
    }
}

这是我在函数中定义此属性的接口:

interface IgenerateFileArgumentObjectItem {
    value: string;

    type: string;
}

export interface IgenerateFileArgument {
    [key: string]: (string | IgenerateFileArgumentObjectItem);
}

很快,我正在尝试使用动态数量的属性来定义对象,这些属性可以与具有两个属性的另一个对象的字符串值相等...

但编译器抱怨,我认为问题在于这一行: (string | IgenerateFileArgumentObjectItem)

是否有任何明显的错误,或者我是否尝试做不可能的事情?

I'm getting error here

And the error

1 个答案:

答案 0 :(得分:1)

我创建了以下示例,您可以在TS playground中查看它。我能够重建你的问题。似乎以下librariesFiles,componentFiles,modellingContentStates,sharePointStates中的一个(或全部)是string []类型。

interface IgenerateFileArgumentObjectItem {
    value: string;

    type: string;
}

export interface IgenerateFileArgument {
    [key: string]: (string | IgenerateFileArgumentObjectItem);
}

var p: string = 'uo'
var lol :string[] = ['no', 'po']; // Fix this to string type
var a: IgenerateFileArgument = {
    c: {
        value: p,
        type:'mo'
    },
    b:'lol',
    e: {
        value:'yo',
        type:'mo'
    },
    m: {  // you can remove this instead
        value:lol,
        type:'go'
    }
}
相关问题