Typically, the marketing definition means "type safe and expressively typed" which outlaws trivial type systems and their trivial type safety.
Haskell also uses type inference rather than requiring type declarations, but that is not _directly_ related.
That's not totally static, but within the definitions of the article, it might be good enough to count as "type safety" without falling into the "null type safety" category.
I don't think it's any less precise a concept. Java type system is less strict than Haskell's, has similar "strictiness" to Python or Ruby (while quite different in static typing), and is more strict than C, or Perl.
You have type-safe casts in Haskell, for instance, where the failure is reflected at runtime.
cast :: (Typeable a, Typeable b) => a -> Maybe b
Those are alright.In C++ with RTTI, IIRC it returns null. That's also "failure at runtime" (of a sort), but you have to check it.
If that's not the case is "type-safe, pure, and functional" a good epithet to extend, say, Haskell's "type-safe" tag with many of its other features that weave with the type system well?