如何在打字稿中定义敲除绑定处理程序?
Posted
技术标签:
【中文标题】如何在打字稿中定义敲除绑定处理程序?【英文标题】:How do I define a knockout binding handler in typescript? 【发布时间】:2013-04-18 17:18:52 【问题描述】:我通常通过在 javascript 中添加自定义 knockout binding handlers
ko.bindingHandlers.myBindingHandler = ...
但现在我必须通过
将它们添加到 TypeScriptko.bindingHandlers["myBindingHandler"] = ...
否则我会收到此错误,因为我使用的是typescript.d.ts:
“KnockoutBindingHandlers”类型的值上不存在属性“myBindingHandler”
我不喜欢["property"]
方法,因为这样我就无法引用它或稍后获得智能感知。
那么,如何在使用 definitelyTyped's knockout definition 时将自定义绑定处理程序添加到淘汰赛,同时还能够通过智能感知等引用我的定义?
【问题讨论】:
【参考方案1】:定义自定义绑定处理程序
实际上非常简单,只需在定义自定义绑定处理程序之前将其 (myBindingHandler
) 添加到KnockoutBindingHandlers
接口。 请注意,您必须在 1.0 版(或更早版本)的 .d.ts
文件中对界面进行此添加。
bindingHandlers.d.ts
/// <reference path="typings/knockout/knockout.d.ts" />
interface KnockoutBindingHandlers
myBindingHandler: KnockoutBindingHandler;
myBindingHandler.ts
/// <reference path="bindingHandler.d.ts" />
ko.bindingHandlers.myBindingHandler = ...
现在一切正常。这不会覆盖任何现有的定义或声明,因此您的定义将位于ko.bindingHandlers.text
等旁边。
请小心,因为如果您没有包含 myBindingHandler
的实际定义并且您在其他地方引用它,由于您添加到 KnockoutBindingHandlers
的定义,它将编译,但它会在运行时中断,因为没有myBindingHandler
的实现。
在 knockoutjs 中添加自定义绑定处理程序的文档是 here
使用 fn 通过 TypeScript 添加自定义函数
同样,要向ko.observable.fn
添加一些内容,您可以在 typescript 中执行此操作
interface KnockoutObservableFunctions
myFnExtension(args: any): returnType;
并用
调用它// x will be defined as a returnType automatically, but you could specify it if you like, either way
var x: returnType = ko.observable("value").myFnExtension(args);
注意:subscribable
、observable
、observableArray
和 computed
类型有不同的接口:
ko.subscribable.fn
...添加到KnockoutSubscribableFunctions
ko.observable.fn
...添加到KnockoutObservableFunctions
ko.observableArray.fn
...添加到KnockoutObservableArrayFunctions
ko.computed.fn
...添加到KnockoutComputedFunctions
在 knockoutjs 中添加到 fn 的文档是 here
【讨论】:
将接口添加到与新处理程序相同的文件对我不起作用(TS 0.9.5,VS2013),但将其添加到单独的 *.d.ts 文件中:@987654323 @ 你可以使用 myBindingHandler: KnockoutBindingHandler;而不是 myBindingHandler: ; 更新此答案以获取来自此类似问题的信息:***.com/questions/15862086/…【参考方案2】:你可以简单地忽略它,但这不是一个好习惯,通过转换为any
你没有定义属性myBindingHandler
的类型
(<any>ko.bindingHandlers).myBindingHandler = ... ;
【讨论】:
【参考方案3】:另一种忽略任何类型检查的肮脏方式:
let bindingHandlers: any = ko.bindingHandlers;
bindingHandlers.myHandler = ...
【讨论】:
以上是关于如何在打字稿中定义敲除绑定处理程序?的主要内容,如果未能解决你的问题,请参考以下文章