私は通常カスタム knockout(Binding Handlers JavaScriptで
ko.bindingHandlers.myBindingHandler = {...}
しかし今私はそれらを TypeScript を介して追加する必要があります
ko.bindingHandlers["myBindingHandler"] = {...}
それ以外の場合、 TypeScript.d.ts を使用しているため、このエラーが発生します。
プロパティ「myBindingHandler」はタイプ「KnockoutBindingHandlers」の値に存在しません
["property"]
のアプローチは好きではありません。それを参照することも、後でインテリセンスを利用することもできないためです。
したがって、 definitelyTypedのノックアウト定義 を使用しながら、カスタムバインディングハンドラーをノックアウトに追加しながら、インテリセンスなどによる定義?
それは実際にはかなり簡単です、それをmyBindingHandler
インターフェースに追加するだけです(KnockoutBindingHandlers
) カスタムバインディングハンドラーを定義する直前。 バージョン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にカスタムバインディングハンドラーを追加するためのドキュメントはここです。
同様に、ko.observable.fn
に何かを追加するには、TypeScriptでこれを行います
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に追加するためのドキュメントはここ