如何在打字稿中定义敲除绑定处理程序?
我通常在JavaScript中添加自定义挖空 绑定处理程序
ko.bindingHandlers.myBindingHandler = {...}
但现在我必须通过TypeScript添加它们
ko.bindingHandlers["myBindingHandler"] = {...}
否则我得到这个错误,因为我正在使用typescript.d.ts :
属性'myBindingHandler'不存在于types'KnockoutBindingHandlers'的值上
我不喜欢["property"]
方法,因为那样我就不能再引用它,或者在以后得到智能感知。
那么,我怎样才能添加我的自定义绑定处理程序淘汰赛,同时使用absolutelyTyped的淘汰赛定义 ,同时也能够通过intellisense引用我的定义等?
定义一个自定义绑定处理程序
其实很简单,只需在定义自定义绑定处理程序之前将其添加到KnockoutBindingHandlers
接口即可( myBindingHandler
)。 请注意,您必须在版本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中添加自定义绑定处理程序的文档就在这里
使用fn通过TypeScript添加自定义函数
同样,要添加一些东西到ko.observable.fn
,你会在打字稿中做到这一点
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
types有不同的接口:
-
ko.subscribable.fn
…添加到KnockoutSubscribableFunctions
-
ko.observable.fn
…添加到KnockoutObservableFunctions
-
ko.observableArray.fn
…添加到KnockoutObservableArrayFunctions
-
ko.computed.fn
…添加到KnockoutComputedFunctions
在knockoutjs上添加到fn的文件就在这里
你可以简单地忽略它 ,但是这不是一个好的做法 ,通过转换为any
你没有定义属性的typesmyBindingHandler
(<any>ko.bindingHandlers).myBindingHandler = { ... };
另一个肮脏的方式来忽略任何types的检查:
let bindingHandlers: any = ko.bindingHandlers; bindingHandlers.myHandler = {...}