Programming should be taught in very shallow layers of slightly increasing complexity. The benefit of dynamic typing is that you need very little to start teaching them. The limitation of most dynamic languages today is that they are fussy, stateful and confusing and it has little to do with their type system and mostly to do with poor language design.
You should consider Scheme as a language to teach beginning students. Scheme allows exposition of ideas with as little fuss as possible and the ability to think in data flow terms (instead of state changes) is a far better way to teach and learn, and it allows the very shallow layering of concepts that make learning programming much easier than in almost any other language. See, for example: https://htdp.org/2003-09-26/Book/
Scheme was much more widely used in the 90's as a teaching language, but for mostly "demand" reasons lost out to Java, which has recently lost out to Python, also for "demand" reasons. Scheme, however, still remains the best language to teach programming concepts with because of its incredible simplicity.
Racket is a distribution (which is a superset of Scheme) that comes with enough libraries to make it broadly useful to learn any beginning software skills and at some point can be layered with a (modern) static type system that can be introduced after the students are comfortable with some basic programming.