I found out the solution. You have to expect T to be an array, not element of an array.
type TTranslationResult<T> = T extends (number | string)[]
? string
: ReactNode | ReactNode[];
export default function translate<T extends ReactNode[] = string[]>(
key: TDictionaryKey,
...params: T
): TTranslationResult<T> {
{
...
}