与IgniteUI的Typescript 0.9.5编译器错误我不明白

时间:2013-12-09 10:02:38

标签: typescript

我使用的是Infragistics IgniteUi库。 我有以下代码

var col1 = $("#grid1").igGrid("option", "columns")[1];

col1是一个像这样的普通对象

{ key:"aa", headerText:"bb"}

我已将自己的一个属性附加到此列,例如

{ key:"aa", headerText:"bb", mine:"cc"}

所以,当我这样做时,

var col1 = $("#grid1").igGrid("option", "columns")[1];
var value1 = col1.mine;

编译器不喜欢它并给我错误

错误1'HTMLElement'

类型的值不存在属性'mine'

我可以通过将col1定义为任何ie

来解决编译错误
var col1:any = $("#grid1").igGrid("option", "columns")[1];

但我并不认为编译器认为col1是'HTMLElement'

我的ignite.d.ts文件的列定义为

interface IgGrid {
    ..
    columns?: IgGridColumn[];
}

interface IgGridColumn {
    headerText?: string;
    key?: string;
    formatter?: any;
    format?: string;
    dataType?: string;
    width?: string;
    hidden?: boolean;
    template?: string;
    unbound?: boolean;
    group?: any[];
    rowspan?: number;
    formula?: string;
    unboundValues?: any[];
}

所以我认为编译器给出错误'我的'不是IgGridColumn的属性。

我的理解错了吗?

1 个答案:

答案 0 :(得分:0)

您可以扩展IgGridColumn接口以包含您的自定义属性,如下所示:

interface IgGridColumn {
    mine: string;
}

这不仅会解决编译器错误,还会对值进行类型检查。

如果您发现自己没有从jQuery调用中获取IgGridColumn,则可以使用相同的技巧:

interface JQuery {
    igGrid(a: string, b: string) : IgGridColumn[];
}

这允许您在此处继续使用推断类型:

var col1 = $("#grid1").igGrid("option", "columns")[1];