Это о том, как использовать возможности статической проверки типов с помощью TypeScript, чтобы раз и навсегда защитить свои коллекции Mongo в Meteor. Согласно The Meteor Guide рекомендуется запретить все клиентские операции над вашими коллекциями. Итак, давайте создадим повторно используемый помощник, который сделает это.
Вы это заметили? Я совершил там огромную ошибку. Я использовал create вместо insert и delete вместо remove. Я просто настолько привык к этому термину CRUD, что это название показалось мне очень естественным. Мой редактор молча игнорирует эту ошибку.
Кажется, мои коллекции на самом деле не заблокированы. Теперь пользователь может вставлять и удалять документы из клиента по своему желанию? Ну нет. К счастью, в этом случае Meteor реализовал собственную защиту во время выполнения. Таким образом, ваше приложение Meteor будет жаловаться, как только достигнет denycall:Error:allow Invalid key:create. Но что, если нет? Существуют ли проверки во время выполнения для каждого возможного свойства в каждом возможном вызове функции? Нет.
TypeScript в помощь
Реализуем такой же хелпер на TypeScript. Это немного более многословно, но мне очень нравится самодокументирование кода.
Какая реальная разница сейчас?
Давайте проверим наш редактор с поддержкой TypeScript (в данном случае VS Code).

Он жалуется, что я не могу присвоить свой литерал Object типу AllowDenyOptions , и мой файл TypeScript не будет компилироваться. Это означает обнаружение ошибки до того, как она может произойти. В этом нет ничего нового, например. Java, С++ или С#. Но для JavaScript это большое улучшение. Есть много случаев, когда разработчики JavaScript часами отлаживают свой код только из-за опечатки в литерале Object или перепутанных параметров в вызове функции. С TypeScript все это осталось в прошлом. Красивый!
Пора исправить ошибку и выпить пива.
Но прежде чем мы сможем выпить пива, давайте создадим еще одного помощника, который будет создавать для нас заблокированные коллекции Meteor.
Теперь, наконец, пришло время выпить пива.
Просто красиво! Ваше здоровье!