如何在打字稿中定义一个敲除绑定处理程序?

All*_*ice 40 knockout.js typescript definitelytyped

我通常在JavaScript中添加自定义的敲除 绑定处理程序

ko.bindingHandlers.myBindingHandler = {...}
Run Code Online (Sandbox Code Playgroud)

但现在我必须通过TypeScript添加它们

ko.bindingHandlers["myBindingHandler"] = {...}
Run Code Online (Sandbox Code Playgroud)

否则我得到这个错误,因为我正在使用typescript.d.ts:

属性'myBindingHandler'不存在于'KnockoutBindingHandlers'类型的值上

我不喜欢这种["property"]方法,因为我不能在以后引用它或获得intellisense.

那么,如何在使用definitelyTyped的敲除定义的同时将我的自定义绑定处理程序添加到knockout ,同时还能通过intellisense等引用我的定义?

All*_*ice 54

定义自定义绑定处理程序

它实际上非常简单,只需在定义自定义绑定处理程序之前将it(myBindingHandler)添加到KnockoutBindingHandlers接口即可. 请注意,您必须在1.0版本(或可能更早版本)文件中对接口进行此添加..d.ts

bindingHandlers.d.ts

/// <reference path="typings/knockout/knockout.d.ts" />

interface KnockoutBindingHandlers {
    myBindingHandler: KnockoutBindingHandler;
}
Run Code Online (Sandbox Code Playgroud)

myBindingHandler.ts

/// <reference path="bindingHandler.d.ts" />

ko.bindingHandlers.myBindingHandler = {...}
Run Code Online (Sandbox Code Playgroud)

现在一切正常.这不会覆盖任何现有的定义或声明,因此您的定义将与... ko.bindingHandlers.text等一致.

要小心,因为如果你没有包含实际定义myBindingHandler并在别处引用它,它将根据你添加的定义进行编译KnockoutBindingHandlers,但它会在运行时中断,因为没有实现myBindingHandler.

在knockoutjs中添加自定义绑定处理程序的文档就在这里

使用fn使用TypeScript添加自定义函数

同样,要添加内容ko.observable.fn,您可以在打字稿中执行此操作

interface KnockoutObservableFunctions  { 
    myFnExtension(args: any): returnType; 
}
Run Code Online (Sandbox Code Playgroud)

并称之为

// 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);
Run Code Online (Sandbox Code Playgroud)

注:对于不同的接口subscribable,observable,observableArray,和computed类型:

  • ko.subscribable.fn ... 添加 KnockoutSubscribableFunctions
  • ko.observable.fn ... 添加 KnockoutObservableFunctions
  • ko.observableArray.fn ... 添加 KnockoutObservableArrayFunctions
  • ko.computed.fn ... 添加 KnockoutComputedFunctions

在knockoutjs中添加到fn的文档就在这里

  • 你可以使用myBindingHandler:KnockoutBindingHandler; 而不是myBindingHandler:{}; (2认同)