@e22m4u/formatted-error
Класс реализующий интерполяцию шаблона сообщения об ошибке.
Установка
npm install @e22m4u/formatted-error
Пример
Рассмотрим пример без использования данного модуля
import {format} from 'util';
function foo(arg) {
if (typeof arg !== 'boolean')
throw new Error(
format('It requires a boolean, but %s given.', arg),
);
}
foo('true');
Пример выше имеет пару проблем:
- невозможно отличить тип значения от строки
- не работает в браузере, так как
util
модуль Node.js
Перепишем его используя класс FormattedError
import {FormattedError} from '@e22m4u/formatted-error';
function foo(arg) {
if (typeof arg !== 'boolean')
throw new FormattedError(
'It requires a boolean, but %s given.',
arg,
);
}
foo('true');
Чтобы отличить строку от остальных типов, такое значение оборачивается
в двойные кавычки, а вместо util.format
данный класс использует
polyfill-функцию, которая обеспечивает работу в браузере.
Объекты
Для объектов и массивов выводится только имя конструктора:
throw new FormattedError(
'got %s, %s and %s',
{foo: 'bar'},
[1, 2, 3],
new Date(),
);
Если нужно разворачивать содержимое массива, то используется
фабричный метод explode
throw FormattedError.explode(
'It requires one of %s, but %s given.',
['yes', 'no', true, false],
new Date(),
);
InvalidArgumentError
Так как чаще всего класс используется при проверке аргументов,
данный модуль содержит ссылку с более явным названием.
import {InvalidArgumentError} from '@e22m4u/formatted-error';
throw new InvalidArgumentError(
'The first parameter requires a string, but %s given.',
undefined,
);
Сигнатуры:
constructor(pattern: string, ...args: any[])
static explode(pattern: string, ...args: any[])
Тесты
npm run test
Лицензия
MIT