Если вы посмотрите на код Angular Material , вы увидите источник этого ответа.
Вот упрощенная версия, которая больше похожа на источник в вопросе.
/**
* @ngdoc directive
* @name exampleDir
*
* @param {string} one-way-parameter A One way.
* @param {expression=} parent-context-expression An Expression
*/
function ExampleDir() {
return {
restrict: 'E',
scope: {
oneWayParameter: '@?oneWayParameter',
parentContextExpression: '=?parentContextExpression'
},
}
Согласно моему опыту работы с компилятором Closure (который не совпадает с JSDoc и не является ngDoc):
Тип scope
равен {Object<string>}
.
Значения параметров scope
не существуют до тех пор, пока $onInit
не будет запущен на контроллере class
, поэтому они должны иметь значение NULL в конструкторе.Вы можете указать эти типы следующим образом:
class SomeCtrl {
constructor() {
/** @type {?boolean} */
this.oneWayParameter;
}
$onInit() {
this.oneWayParameter = 'this is not a boolean';
}
}
В этом примере this.oneWayParameter = 'this is not a boolean';
выдает ошибку в Closure, поскольку свойство ожидает логическое значение, но находит строку.