Обобщенные типы
Обобщенные типы можно рассматривать как универсальные шаблоны, параметризуемые типами. Обобщенные типы позволяют избежать жесткого определения используемых типов. Если данные и/или алгоритмы применяются для различных типов, использование обобщенных типов позволяет:
- избежать повторного написания программного кода;
 - реализовывать более универсальные алгоритмы.
 
Синтаксис
Синтаксис объявления обобщенного типа:
имя-типа<имя-типа-параметра, ..., имя-типа-параметра>
- имя-типа — имя обобщенного типа;
 - имя-типа-параметра — параметры обобщенного типа.
 
Параметры можно указывать в именованной форме:
имя-типа<имя-параметра1 = Тип1, ..., имя-параметраN = ТипN>
Например:
Соответствие<Число, ТипЗначения = Строка>
Ограничения:
- в именованной форме нельзя указать параметры функциональных типов;
 - именованные параметры должны следовать строго за позиционными (при их наличии).
 
Возможные ограничения на типы-параметры
На типы-параметры (переменные типа в объявлении, например, Т в Массив<Т>) некоторых обобщенных типов могут накладываться ограничения. Всего есть два типа ограничений:
- Ограничение на иерархию — тип-специализация (конкретный тип, подставляемый вместо параметра, например, 
ЧисловМассив<Число>) должен иметь определенный базовый тип. - Ограничение на наличие значения по умолчанию — тип-специализация должен иметь значение по умолчанию.
 
При попытке объявить тип с неподходящим типом-специализацией возникает ошибка компиляции.
Информация времени выполнения
Информация о типах-параметрах обобщенного типа сохраняется до времени выполнения. При проверке типа с помощью операции это данная информация учитывается. Пример:
метод Обработать()
    пер СоставнойМассив = [10, "20", 30, 40]    // Массив<Число|Строка>
    пер МассивСтрок = ["10", "20", "30", "40"]  // Массив<Строка>
    пер МассивЧисел = [10, 20, 30, 40]          // Массив<Число>
    пер Сравнение: Булево = СоставнойМассив это Массив<Строка|Число> // Истина
    
    для Индекс = 0 по СоставнойМассив.Размер() - 1
        если СоставнойМассив[Индекс] это Число
            СоставнойМассив[Индекс] = СоставнойМассив[Индекс].ВСтроку()
        ;
    ;
    
    // СоставнойМассив содержит только строки, но его составной тип остался Массив<Строка|Число>
    Сравнение = СоставнойМассив == МассивСтрок              // Истина (сравнение по содержимому)
    Сравнение = СоставнойМассив == МассивЧисел              // Ложь (разное содержимое)
    Сравнение = СоставнойМассив это Массив<Строка|Число>    // Истина (параметры обобщенного типа не изменились)
    Сравнение = СоставнойМассив это Массив<Строка>          // Несовместимые типы Массив<Число|Строка> и Массив<Строка>
;