我只是一个继承了一些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对象分配给实现相关接口的成员,问题是什么?
答案 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
)(尽管这会可能会在几个地方破坏你的代码)