Typescript, Generics, Polymorphism.
StringObject> means that <T> object will at minimum have all keys and values of string type (remember constraints?). UppercaseObject<T> maps through all properties of the obj and creates a new object type with all the keys equal to the obj keys and all the values having a string type. Obviously,