Ответ 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 здесь
Используя fn для добавления пользовательских функций с помощью TypeScript
Аналогично, чтобы добавить что-то в 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
Документация для добавления на fn в knockoutjs здесь