typeahead.js使用val“方法”返回输入字段的值:
jQuery#typeahead('val')
不幸的是,DefinitelyTyped d.ts for typeahead.sj并不包含这种“方法”的存在。
但是当我试图添加新的签名时
typeahead(methodName : 'val'): string;
我知道这个错误
TS2154:专用过载签名不能分配给任何非专用签名.
如果我做得对,那是因为其他具有不同签名的方法已经存在,例如
typeahead(methodName: 'destroy'): JQuery;
如果我创建一个返回JQuery对象的签名,一切都会正常工作。
typeahead(methodName : 'val'): JQuery;
除了“方法”,现在返回JQuery而不是字符串,并且当我尝试像这样将它转换成字符串时
<string>$('#typeahead').typeahead('val')
我知道这个错误
TS2012:无法将'JQuery‘转换为'JQuery’:类型'ajaxComplete‘中缺少属性’ajaxComplete‘。
如何正确地实现val“方法”?
PS:我一直用撇号来表示“方法”,因为我觉得2014年JQuery插件使用字符串作为方法名是荒谬的。
发布于 2014-07-20 17:08:03
在使用专门的重载签名时,有几条规则需要遵守:
·必须至少有一个非专门的签名。 ·每个专用签名必须返回一个非专门签名的子类型。 执行签字必须与所有签字一致。
(资料来源:Ch1,Pro TypeScript)
因此,在您的示例中,您不需要更改要添加的专用重载;但是需要添加一个非专用签名才能与其兼容(即返回字符串的签名,而不是jQuery):
interface JQuery {
// Non-specialized (but matching) signature
typeahead(methodName: string): string;
// Specialized signature
typeahead(methodName : 'val') : string;
}
https://stackoverflow.com/questions/24850870
复制相似问题