typeahead.js使用 val “method”返回输入字段的值:
jQuery#typeahead('val')
(https://github.com/twitter/typeahead.js/blob/master/doc/jquery_typeahead.md#api)
对于typeahead.sj,DefinitelyTyped d.ts不包含此“方法”的存在。
但是当我尝试添加新签名
时typeahead(methodName : 'val'): string;
我收到此错误
TS2154:专业过载签名不能分配给任何非专业签名。
现在,如果我做得对,那是因为已经存在具有不同签名的其他方法,例如此
typeahead(methodName: 'destroy'): JQuery;
如果我创建一个返回JQuery对象的签名
,那么一切正常typeahead(methodName : 'val'): JQuery;
除了“方法”现在返回JQuery而不是String,当我尝试将它转换为String时这样
<string>$('#typeahead').typeahead('val')
我收到此错误
TS2012:无法将'JQuery'转换为'string':缺少类型'String' 属性'ajaxComplete'来自'JQuery'类型。
如何正确实施val“方法”?
PS:我继续使用撇号作为“方法”这个词,因为我觉得在2014年JQuery插件使用字符串作为方法名称是荒谬的。
答案 0 :(得分:1)
使用专门的过载签名时需要遵循一些规则:
•必须至少有一个非专业签名。
•每个 专用签名必须返回非专用的子类型 签名。
•实施签名必须与所有人兼容 签名。
(资料来源:Ch1, Pro TypeScript)
因此,在您的情况下,您不需要更改您尝试添加的专门过载;但你需要添加一个非专业的签名才能兼容(即返回一个字符串,而不是jQuery):
interface JQuery {
// Non-specialized (but matching) signature
typeahead(methodName: string): string;
// Specialized signature
typeahead(methodName : 'val') : string;
}