#node.js #typescript #node-mssql
Вопрос:
Мне недавно дали это Node.js Проект TypeScript, и я пытаюсь понять, почему первоначальный автор (недоступный для ответа на этот вопрос) использует определенный шаблон для создания пула подключений к базе данных с помощью node-mssql.
В принципе, предлагаемый способ создания пула соединений и подключения (из официальных документов)
// async/await style:
const pool = new sql.ConnectionPool(config);
const poolConnect = pool.connect();
pool.on('error', err => {
// ... error handler
});
await poolConnect;
Таким образом pool
, переменная объявляется и присваивается непосредственно в результате new sql.ConnectionPool(...)
, что затем позволяет вызывать pool.close()
в конце приложения, которое предлагается
[…] например, если мы запускаем какой-либо инструмент CLI или задание CRON.
Однако автор моего кода делает
let pool: {
connect: () => any;
on: (arg0: string, arg1: (err: any) => void) => void;
request: () => any;
};
let poolConnect: any;
// then after
pool = new sql.ConnectionPool(config);
poolConnect = pool.connect();
// rest is the same
...
Это похоже на ограничение переменной пула только подмножеством ее потенциальных методов (например, я не могу вызывать pool.close()
пул, созданный таким образом), но я не могу понять, почему это было бы хорошей идеей.
Примечание: Я вполне уверен, что это не имеет ничего общего с MSSQL или подключением к базе данных в частности и больше связано с машинописным текстом в целом, однако я не могу придумать хороший вариант использования для этого шаблона, что я упускаю?
Комментарии:
1. Я мог бы предположить, что они пытались контролировать побочные эффекты, созданные другими разработчиками, ограничивая то, что было возвращено, или, возможно, в какой-то момент типизация этого метода была плохой, и поэтому им пришлось определить тип на основе наблюдений или документации.
2. @DanielGimenez Спасибо тебе. Я думаю, что ваше второе предположение может быть хорошим предположением, поскольку библиотека MSSQL написана на js, поэтому в ней нет типизаций. Может быть, это способ принудительно ввести текст? Я только что обнаружил, что есть вещь под названием
@types/mssql
(которую проект не использует, но все еще работает), которая должна обеспечивать такие типы, стандартно ли включать ее в проект машинописи, использующий MSSQL? Следует ли это делать для каждой другой библиотеки js, которую я добавляю?