Error Message: "An interface can only extend an object type or intersection of object types with statically known members"

Types vs Interfaces differ in the ability to extend union types

(I'm answering my own question) This is because you cannot extend a union type using an interface. You must use type alias:

export type Partial2DPoint = { x: number } | { y: number }
export type Partial3DPoint = Partial2DPoint & { z: number }

See this answer:

A class can implement an interface or type alias, both in the same exact way. Note however that a class and interface are considered static blueprints. Therefore, they can not implement / extend a type alias that names a union type.