首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将JQuery转换为String --或者如何避免这种需要?

如何将JQuery转换为String --或者如何避免这种需要?
EN

Stack Overflow用户
提问于 2014-07-20 13:16:20
回答 1查看 1.2K关注 0票数 1

typeahead.js使用val“方法”返回输入字段的值:

代码语言:javascript
运行
复制
jQuery#typeahead('val')

(typeahead.md#api)

不幸的是,DefinitelyTyped d.ts for typeahead.sj并不包含这种“方法”的存在。

但是当我试图添加新的签名时

代码语言:javascript
运行
复制
typeahead(methodName : 'val'): string;

我知道这个错误

TS2154:专用过载签名不能分配给任何非专用签名.

如果我做得对,那是因为其他具有不同签名的方法已经存在,例如

代码语言:javascript
运行
复制
typeahead(methodName: 'destroy'): JQuery;

如果我创建一个返回JQuery对象的签名,一切都会正常工作。

代码语言:javascript
运行
复制
typeahead(methodName : 'val'): JQuery;

除了“方法”,现在返回JQuery而不是字符串,并且当我尝试像这样将它转换成字符串时

代码语言:javascript
运行
复制
<string>$('#typeahead').typeahead('val')

我知道这个错误

TS2012:无法将'JQuery‘转换为'JQuery’:类型'ajaxComplete‘中缺少属性’ajaxComplete‘。

如何正确地实现val“方法”?

PS:我一直用撇号来表示“方法”,因为我觉得2014年JQuery插件使用字符串作为方法名是荒谬的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-20 17:08:03

在使用专门的重载签名时,有几条规则需要遵守:

·必须至少有一个非专门的签名。 ·每个专用签名必须返回一个非专门签名的子类型。 执行签字必须与所有签字一致。

(资料来源:Ch1,Pro TypeScript)

因此,在您的示例中,您不需要更改要添加的专用重载;但是需要添加一个非专用签名才能与其兼容(即返回字符串的签名,而不是jQuery):

代码语言:javascript
运行
复制
interface JQuery {
    // Non-specialized (but matching) signature
    typeahead(methodName: string): string;

    // Specialized signature
    typeahead(methodName : 'val') : string;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24850870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档