Как вариант, можно совместить оба подхода -- т.е. сеттеры + соответствующие объявления типов.
Типы сделают интерфейс библиотеки более понятным, а сеттеры выполнят валидацию вводимых данных вне зависимости от включенных range checks. Хотя считается, что хороший код должен корректно работать со включенными range checks, кому-то может потребоваться подключить ODFProc к старому проекту, быстро почистить код которого нет возможности.