// @strict-types
#Область ПрограммныйИнтерфейс
Процедура ТестПересеченияТипов() Экспорт
переменная_с_другим_типом = 10;
// несоблюдение контракта не диагностируется, но сценарий пока сложно представить
ОбщийМодуль2.неопределено_явно_указан_в_типах_параметра(переменная_с_другим_типом);
// несоблюдение контратка успешно диагностируется
ОбщийМодуль2.неопределено_как_признак_необязательности_параметра(переменная_с_другим_типом);
// несоблюдение контракта не диагностируется, но этот сцеанрий уже достаточно реалистичный,
// по крайней мере я не вижу другого способа "безопасно" указать необязательное поле
// указывать в комментарии, что поле может не существовать, а затем проверять через Свойство, мне кажется
// менее безопасным, т.к. контекстная подсказка будет показывать поле и можно забыть глянуть в описание
// (особенно если структура достаточно большая),
ОбщийМодуль2.структура_с_необязательным_полем().НеобязательноеПоле = переменная_с_другим_типом;
КонецПроцедуры
#КонецОбласти
ОбщийМодуль2:
// @strict-types
#Область ПрограммныйИнтерфейс
// Неопределено явно указан в типах параметра.
//
// Параметры:
// параметр - Неопределено, Строка -
//
Процедура неопределено_явно_указан_в_типах_параметра(параметр) Экспорт
// представить сценарий явного указания не могу
КонецПроцедуры
// Неопределено как признак необязательности параметра.
//
// Параметры:
// параметр - Строка
//
Процедура неопределено_как_признак_необязательности_параметра(параметр = Неопределено) Экспорт
//
КонецПроцедуры
// Структура с необязательным полем.
//
// Возвращаемое значение:
// Структура:
// * НеобязательноеПоле - Неопределено, Строка -
//
Функция структура_с_необязательным_полем() Экспорт
Данные = Новый Структура;
Данные.Вставить("НеобязательноеПоле", Неопределено);
Возврат Данные;
КонецФункции
#КонецОбласти
Без копирования поля в отдельную переменную было бы еще удобнее, на это заведу отдельное пожелание:
ОбщийМодуль1:
ОбщийМодуль2:
Без копирования поля в отдельную переменную было бы еще удобнее, на это заведу отдельное пожелание: