Как вести документацию для компонентов Angular 2+?
Давать компонентам правильные названия
Таким образом, чтобы при прочтении названия компонента можно было понять, что данный компонент из себя представляет. К примеру: select, datepicker, graph, file-input, editorПравильно распределять компоненты по директориям
Если компонент является разделом на сайте, то перед наименованием директории в которой хранится этот компонент пишем, к примеру, +. Составляющие части разделов размещаются внутри директории раздела которому они принадлежат.
Выглядит это так: есть страница, допустим, "часто задаваемые вопросы" - "+faq", на которой есть независимые части, такие как, "вопрос/ответ"-  "question-answer" и "задать вопрос" - "ask-question". В итоге иерархия получается такой:
-- +faq
---- ask-question
------ ask-question.component.ts
---- question-answer
------ question-answer.component.ts
-- faq.component.ts
Если компонент используется во многих местах (общий компонент), то такие компоненты помещаются в директорию /shared и группируются по смысловой составляющей, к пример:
-- shared
---- forms
------ editors
-------- summernote
------ input
-------- datepicker
-------- select
---- graphs
------ flot-charts
...
После этого пробежавшись глазами по всем директориям сразу можно понять где разделы, где составляющие этих разделов, а где общие компоненты. И уже, без какого либо описания, можно понять что и для чего.
Для общего документирования приложения можете воспользоваться Dgeni (инструкция)
Для TypeScript можете воспользоваться typedoc
что бы не тратить кучу время на эти модные документации достаточно перед куском кода понятным родным языком писать комментарии. не надо писать ерунду или какие то очевидности на английском. а то бывает смотришь ацкий гомнокод и видишь такой четкий коммент /*
    * Phone mask on inputs
    * */
    $rootScope.mask = function() {
        $(document).ready(function() {
            $('input[type="tel"]').mask('+7 (999) 999-99-99');
        });
    }();