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中添加自定义绑定处理程序的文档就在这里
同样,要添加内容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 ... 添加 KnockoutSubscribableFunctionsko.observable.fn ... 添加 KnockoutObservableFunctionsko.observableArray.fn ... 添加 KnockoutObservableArrayFunctionsko.computed.fn ... 添加 KnockoutComputedFunctions在knockoutjs中添加到fn的文档就在这里
| 归档时间: |
|
| 查看次数: |
8915 次 |
| 最近记录: |