type BasicInnerJoin<T, Name extends string, U> = T & { [K in StringKeyOf<U> as `${Name}.${K}`]: U[K]; };