Мне было интересно, возможно ли что-то подобное.
Я использую Nest JS и TypeORM для своего проекта и хочу использовать транзакции. Я пытаюсь заменить это использование:
getConnection().transaction(async (transactionManager) => {
const repositoryOne = transactionManager.getCustomRepository(RepostiroyOne) // obviusly types are inherited here
const repositoryTwo = transactionManager.getCustomRepository(RepostiroyTwo)
// code in transaction
})
на что-то вроде этого:
const transaction = async(callback, repositories) => {
const getTransactionRepositories = (manager: EntityManager) => {
return repositories.map((repository) => manager.getCustomRepository(repository));
};
return getManager().transaction(async (transactionManager) =>
callback(...getTransactionRepositories(transactionManager)),
);
};
затем в коде для его использования:
transaction(async (repoOne, repoTwo) => {
// code to run inside transaction
// but types here are not inherited
// if i say repoOne: RepositoryOne it is working fine, but I tried to minimize repetition and
// would like if repoOne is a type of RepositoryOne without manually adding it
}, [RepositoryOne, RepositoryTwo])
Итак, как Я упомянул в первом примере, что я пытаюсь исключить:
const repositoryOne = transactionManager.getCustomRepository(RepositoryOne)
, тогда этот repostiryOne становится:
repositoryOne: RepositoryOne
Итак, в моя функция, 1-й параметр, например repoOne
, будет иметь тип RepositoryOne
, предоставленный в качестве первого элемента в массиве и т. д.
примечание : строго говоря о декораторах транзакций TypeORM , Я не буду использовать их, так как есть некоторые проблемы с модулем тестирования вложений и декораторами типов.
Любая помощь приветствуется