In addition to strong typing and weak typing from the perspective of type safety, programming languages can be divided into statically typed and dynamically typed from the perspective of type checking. There is no debate about the difference between statically typed and dynamically typed languages; everyone agrees.
The main manifestation of statically typed languages is that a variable declaration is explicitly typed. And after the variable is declared, its type cannot be changed. Dynamically typed languages, on the other hand, have the ability to specify the type of a variable at runtime, and the type of a variable can change at any time. In dynamically typed languages, variables are untyped and the values they hold are typed.
Summary: From the perspective of type safety, programming languages are generally divided into strongly typed languages and weakly typed languages. The difference between the two languages is whether arbitrary implicit type conversion is allowed; From the perspective of type checking, there are static and dynamic types. The difference between the two types is whether the type of a variable can be changed at any time.