1

Когда некоторый флаг эксперимент, я зарегистрировать инъекцию, как:Can 'goog.nullFunction' подходит для конкретной сигнатуры функции?

'abcFactory': name.space.createSomeModel 

и ввести завод, как показано ниже:

/** 
* @param {!function(!Object): !some.DataType} abcFactory 
* @constructor @struct 
*/ 
some.component.do = function(abcFactory) { 

}; 

some.component.do.inject = ['abcFactory']; 

Но когда флаг эксперимент выключен, можно просто зарегистрироваться:

'abcFactory': goog.nullFunction 

без компилятора, жалующегося на то, что подпись функции не соответствует?

Can 'goog.nullFunction' соответствует любой сигнатуре функции? Наверное, нет.

ответ

1

Вы можете просто взять сделать Пары Nullable (или еще лучше необязательно) и указать только фабричную функцию, когда флаг на:

https://github.com/google/closure-compiler/wiki/Annotating-JavaScript-for-the-Closure-Compiler#optional-parameter-in-a-param-annotation

Возможен также добавить некоторые проверки, чтобы убедиться, что функция не null, прежде чем использовать его.