2016-07-19 2 views
4

Предположим, я пишу библиотеку с машинописным текстом. Существует функция со следующим signature-Запрет на вызов JavaScript-скрипта без ошибок

function check(value: "YES"|"NO"): boolean 

Таким образом, когда эта функция вызывается из других машинописи файлов с другими значениями, чем «ДА» или «НЕТ», то будет ошибка компиляции. Но если вызывается из файла Javascript, ошибки не будет, поскольку Javascript не имеет информации о типе. Я могу проверить недопустимые значения внутри моей функции и выбросить ошибки. Но тогда безопасность типа, предоставляемая машинописным текстом, кажется мне иллюзией.

Что делать в этом случае в качестве разработчика библиотеки? Идите с чистым javascript? Что делали такие команды, как Angular?

+0

Вы должны делать то, что считаете лучшим. Этот вопрос не имеет * объективного * ответа, и поэтому вне темы для SO. * «... ответы на этот вопрос будут, как правило, почти полностью основаны на мнениях ...» * –

+0

Я не знаком с Typcript, но из того, что я понимаю, он преобразуется в чистый javascript во время компиляции. Тем не менее, если вы доставляете скомпилированный код вместо машинописного кода, он должен работать так, как предполагалось? Я также придерживаюсь этого, машинопись предназначена для того, чтобы помочь вам закодировать, применяя ограничения и предотвращая ошибки. JS, в который он компилируется, - это то, что действительно входит в продукт. Таким образом, поскольку вы не можете заставить общество использовать машинописный текст, вы не можете на машинке для того, чтобы ваш код был «свободен от ошибок». – Dellirium

+0

@ T.J.Crowder Должен ли я спрашивать об этом у программистов? – Gulshan

ответ

2

В этом разница между временем сборки (времени компиляции) и проверкой времени выполнения. TypeScript помогает вам с проверкой времени сборки. Предоставление файла описания TypeScript в вашей библиотеке поможет пользователям получить значимые ошибки времени компиляции, если они неправильно используют вашу библиотеку.

Если ваш lib потребляется JavaScript напрямую, у вас не будет встроенного шага, чтобы уведомить пользователя, и вам придется прибегать к сообщениям времени выполнения. Если размер файла не является проблемой, я бы предложил бросать осмысленное сообщение об ошибке:

function (check) { 
    if (check != "YES" && check != "NO") 
    throw new Error("Invalid Check Value: " + check); 
    ... 
} 

Если вы беспокоитесь о размере файла, вероятно, лучше всего просто не оп на недействительных вызовов. Или иметь какой-то разумный дефолт. Это будет зависеть от вашей ситуации.

Вы также можете рассмотреть «отладочную» сборку вашей библиотеки, которая предоставляет сообщения об ошибках, но исключает их из миниатюрной версии сборки.

Смежные вопросы