What are the characteristics of a typeless programming language?
It depends on what happens if the programmer tries to do something like add two things with the wrong operator.  If it causes a compile-time error, the language is probably statically typed.  If it throws a runtime error complaining that the two have the wrong type, the language is probably dynamically typed.  If it doesn't throw an error and just tries to add those two things (possibly resulting in gibberish), it might be untyped.

To put it another way, it depends how those operations are implemented.  If they are implemented to keep track of the type of the variables and check that those types match what is expected, it is typed.  If it doesn't keep track of types, then it is untyped or weakly typed.

See https://en.wikipedia.org/wiki/Type_system and https://www.sitepoint.com/typing-versus-dynamic-typing/.