Typing in this context pertains to when and how a programming language assigns data types. With static typing, data types are explicitly defined and checked at compile time. An example of this is how variables are declared in Java, where the variable name follows the data type. With dynamic typing, the datatype of a variable is established at run time. This can be seen in Python where a function’s parameters and return type do not need to be specified.
One typing may be more suitable over the other to use depending on the situation. Dynamically typed languages offer better flexibility, while statically typed languages provide stronger guarantees about the program's correctness.
Duck typing is associated with dynamic typing because if something looks like a duck and quacks like a duck, it must be a duck. This kind of like if a variable is used as an integer, it is an integer. With static typing, the duck must be declared as a duck for it to be a duck.