Typescript:命名属性类型必须可分配给字符串索引器类型

时间:2018-02-22 17:54:43

标签: javascript typescript

我只是一个继承了一些TypeScript代码的程序员。有时你只是想知道正在发生什么,而不需要休息几周就可以熟练掌握一门新语言。我有一个界面:

interface IJQuery {
    addRecordInline(object: any);
}

我在addRecordInline上收到错误:

“命名属性类型”(对象任何)=>任何'必须可分配给字符串索引器类型'HTMLElement':类型'HTMLElement'具有非可选属性'accessKey',它不存在于类型'(对象任何)=>任何'

任何有关正在发生的事情的线索都会受到赞赏。我环顾了互联网......有一些关于索引器的帖子似乎最接近。但是这里发生了什么?只是指向某些信息的指针。谢谢。

编辑:

正在实施的界面示例:

interface IDocumentManager {
    UpdateForm: IJQuery;
    UpdateActionUrl: string;
    DocIdPrefix: string;
}

第二次编辑:

这是一个实现接口的类:

class MemberDocumentManager implements IDocumentManager {
    private ConfirmDeleteButton: IJQuery;
    // other declarations removed

    constructor() {
        this.ConfirmDeleteButton = $('#deleteConfirmButton');
    }
}

正在将JQuery对象分配给实现相关接口的成员,问题是什么?

1 个答案:

答案 0 :(得分:1)

根据错误,这不是IJQuery的唯一定义。据我所知,这是针对您的项目的,并不属于JQuery库。

形成错误,可能有IJQuery的定义包含索引器:

interface IJQuery {
    [name: string]: HTMLElement
}

这意味着此类型定义的所有属性必须是HTMLElement

类型
interface IJQuery {
    addRecordInline(object: any) : void; // Not ok
    anElement: HTMLElement // OK
}

您可以通过删除索引器([name: string]: HTMLElement)来放宽限制,或者在另一个接口上定义方法,或者更改索引器以返回元素或函数([name: string]: HTMLElement | Function)(尽管这会可能会在几个地方破坏你的代码)