我通常会添加一些自定义的淘汰赛 绑定处理程序在JavaScript中通过
ko.bindingHandlers.myBindingHandler = {...}
但现在我要补充他们打字稿通过
ko.bindingHandlers["myBindingHandler"] = {...}
否则我是因为我用得到这个错误typescript.d.ts :
该物业“myBindingHandler”不会对类型的值存在“KnockoutBindingHandlers”
我不喜欢["property"]
的方法,因为那时我不能引用它,或者它获得智能更高版本。
所以,我怎么可以加我的自定义绑定处理程序,同时使用淘汰赛definitelyTyped的淘汰赛定义 ,同时还能够通过智能感知,等来引用我的定义是什么?
定义自定义绑定处理程序
它实际上很简单,只是把它(添加myBindingHandler
)到KnockoutBindingHandlers
接口定义你的自定义绑定处理程序权利之前 。 请注意,你必须做使这个除了接口,一个内.d.ts
文件的1.0版本(或可能更早)。
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添加自定义bindinghandlers该文档是在这里
利用FN与打字稿添加自定义功能
同样,要添加一些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
类型:
-
ko.subscribable.fn
...添加到KnockoutSubscribableFunctions
-
ko.observable.fn
...添加到KnockoutObservableFunctions
-
ko.observableArray.fn
...添加到KnockoutObservableArrayFunctions
-
ko.computed.fn
...添加到KnockoutComputedFunctions
添加到在knockoutjs FN的文档是在这里
你可以简单地忽略它 ,但是这不是一个好的做法 ,通过转换成any
你没有定义属性的类型myBindingHandler
(<any>ko.bindingHandlers).myBindingHandler = { ... };
另一种肮脏的方式忽略任何一种类型检查:
let bindingHandlers: any = ko.bindingHandlers;
bindingHandlers.myHandler = {...}