No they aren't. Everything is a string. The runtime does some optimisation where it actually does use different types under the hood but they don't change the semantics.
If you try to pass a list into a function expecting a string it will just treat the list as a string. No type error or anything, not even at runtime.
CMake is the same. Terrible design. Real types are useful.