I think the docs are correct. If you want to get any parameters (like the extents of the shape), then you have to get the shape itself. Though this is rarely, if ever, actually needed in a game. You typically just want to deal with the StaticBody2D or other nodes that are controlling the shape. Like for collision code in your example, you would be checking StaticBody2D not CollisionShape2D. And in any case, you rarely ever need to explicitly check for StaticBody2D either. You would use signals or callback functions (like get_overlapping_bodies) and never check the type specifically.