Allows for both dynamic and static typing within a language.
Part of language design, in type safety, the duck test (abductive reasoning) states: "If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck."
Duck typing is an application of the duck test, where type checking is deferred to runtime, and is implemented by dynamic typing. This includes checks to see if an object's suitability is determined by the presence of certain methods and properties rather than actual type of the object (whether it properly implements some interface).