Eu diria que, tanto na parte de, por exemplo, ao passar uma coleção X, ela terá Y e Z como chaves únicas válidas. Já ao passar uma coleção Y, essas chaves seriam diferentes. Não sei se haveria uma maneira mais limpa de fazer isso do que eu fiz utilizando o UniqueCollectionsKeysData. Além disso, o que você mencionou também vejo como um problema cuja solução ficou bem extensa, porque quero que apenas seja possível passar uma chave das várias possíveis dentro de .findOne(collection.uniqueKey), e a única maneira que encontrei de fazer isso foi com o RequireOnlyOne.
Não diria que é inútil, pois esses dados não serão recebidos diretamente do usuário, mas sim de um desenvolvedor que utilizará a função. Limitar as opções que o desenvolvedor pode passar como parâmetro pode reduzir significativamente o número de erros.
Entendo as preocupações levantadas sobre o TypeScript e suas limitações em runtime, mas é importante lembrar que a tipagem está mais voltada para o desenvolvimento e manutenção do código. Ela ajuda a tornar o código mais legível e seguro durante a fase de desenvolvimento, permitindo que o dev saiba quais tipos de dados esperar e como utilizá-los corretamente.
Além disso, a introdução de uma nova biblioteca para uma única função de validação pode aumentar a complexidade do projeto, gerar dependências desnecessárias e potencialmente dificultar a manutenção do código a longo prazo. Não sei se seria a melhor abordagem nesse caso!