如何定义淘汰赛中打字稿结合处理?(How do I define a knockout bindin

2019-09-01 02:26发布

我通常会添加一些自定义的淘汰赛 绑定处理程序在JavaScript中通过

ko.bindingHandlers.myBindingHandler = {...}

但现在我要补充他们打字稿通过

ko.bindingHandlers["myBindingHandler"] = {...}

否则我是因为我用得到这个错误typescript.d.ts

该物业“myBindingHandler”不会对类型的值存在“KnockoutBindingHandlers”

我不喜欢["property"]的方法,因为那时我不能引用它,或者它获得智能更高版本。

所以,我怎么可以加我的自定义绑定处理程序,同时使用淘汰赛definitelyTyped的淘汰赛定义 ,同时还能够通过智能感知,等来引用我的定义是什么?

Answer 1:

定义自定义绑定处理程序

它实际上很简单,只是把它(添加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);

注:对于不同的接口subscribableobservableobservableArray ,并computed类型:

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

添加到在knockoutjs FN的文档是在这里



Answer 2:

你可以简单地忽略它 ,但是这不是一个好的做法 ,通过转换成any你没有定义属性的类型myBindingHandler

(<any>ko.bindingHandlers).myBindingHandler = { ... };


Answer 3:

另一种肮脏的方式忽略任何一种类型检查:

let bindingHandlers: any = ko.bindingHandlers;
bindingHandlers.myHandler = {...}


文章来源: How do I define a knockout binding handler in typescript?