At least you have the workaround
type PublicPart<T> = {[K in keyof T]: T[K]}; //keyof only sees public properties