any solves any problem

Cicerone

As you know, any considered harmful in TypeScript. I do believe it’s better to avoid it, and especially after unknown was introduced to replace any in lots of cases. To discourage developers from using it, I can even imagine no-any rule turned on as a warning, but I don’t think deprecating any should be a goal.

Having a number of dependencies, it might be problematic to integrate all the third-party code without using any. Sometimes, when you upgrade a single package, some of its’ types rely on other package’s types, so you have to add a sprinkle of any. Or, pretty commonly, every TypeScript upgrade brings a handful of new errors across whole codebase. And if you don’t have a full picture or even authority to make substantial changes in someone else’s code, at times you have to suppress these errors with another splash of any. Thus, maintaining zero-any codebase seems to me excessively and unduly time consuming.

But we still want to discourage people from using it, and that’s where type aliases to any became handy:

/** */
type temporaryAny = any;


temporaryAny solves refactoring problems mentioned above by not using any and simplifying spotting refactoring-only any.

Once you see the benefits, you realise there is nothing that stops you from annotating every non-semantic any with temporaryAnyUntillCertainProblemSolved:

/**
* Type alias for string types that have to be narrowed to literal types
*/
type temporaryString = string;

/**
* Type alias for number types that have to be narrowed to literal types
* https://github.com/Microsoft/TypeScript/issues/15480
*/
type temporaryNumber = number;

/**
* Used for situations when conditional types (for example ReturnValue<>) should be used.
*/
type temporaryAnyUntilTypescript2_8 = temporaryAny;


And even seemingly too verbose:

/**
* For generic type T:
* 
* const bar: T["bar"] // string | null | undefined
* if (bar) {
*  bar // is still string | null | undefined
* }
* 
* https://github.com/Microsoft/TypeScript/issues/22214
*/
type temporaryAnyWhileTypeGuardsNotWorkingForIndexedTypesWithGenerics = temporaryAny;


Every time I type any I wonder if it’s an any or temporary any.