Using Conditional Types in Generic Classes
Tipos condicionais podem ser usados para expressar o relacionamento entre uma sobrecarga de tipos de parametros de função e o resultado produzido como mostrado no código abaixo e isso é mais conciso alternativamente para um tipo de sobrecarga de função assim conditional type podem ser dificeis de entender
Código
A classe Collection<T> usa um array para guardar objetos é especifico pelo generic type parameter nomeao T. O metodo total define dois generic type parameters: P que especifica uma propriedade para usar para criar o total e U que especifica qualquer resultado que deve ser formatado
O resultado do método total é uma conditional type que é resolvida usando o valor provido para o type parameter U
O uso de conditional type significa que o resultado do metodo total é determinado pelo argumento provido para o type parameter U. Assim o compiler pode inferir U do valor provido para o argumento format, o método invocado deste modo:
Quando o argumento para o parametro format é true, a conditioanl type resolve para setar o result type do método total para uma string. Isso combina o data type produzido pela implementação do método
RETURNING VALUES IN METHODS THAT USE A CONDITIONAL TYPE
No tempo de escrita o TSC tem dificuldade de correlacionar o data type dos valores retornado pelos metodos e funções quando conditional types são usadas e para essa questão que usamos um type assertion no método total para chamar o compiler para tratar o resultado como any. Sem o type annotation, o compilador vai reportar um erro