When you start learning TypeScript, you will come across two types - "any" and "unknown"
any - The any
type allows us to assign literally “any” particular value to that variable, simulating what we know as plain JavaScript.
unknown - The unknown
type is the type-safe counterpart of any. Anything is assignable to unknown
, but unknown
isn't assignable to anything but itself and any without a type assertion or a control flow based narrowing.
Let's understand with an example.
let age: number;
let userAge: any;
userAge = 'This is some age';
userAge = 20;
age = userAge;
This code works! 🎉
Type of userAge
is any
so it can be assigned any value - string, number etc.
let age: number;
let userAge: unknown;
userAge = 'This is some age';
userAge = 20;
age = userAge;
The statement age=userAge
gives an error.
The type is unknown so what is the problem here?
To assign an unknown value to a value with a fixed type, we have to do some quick type check!
let age: number;
let userAge: unknown;
userAge = 'This is some age';
userAge = 20;
if(typeof userAge === 'number') {
age = userAge;
}
And now this works too! 🎉
When to use what?
You shouldn't use either of them. But if you really have to then unknown
is a better choice if you know what you want to do with that value eventually.
I don't recommend using any
- it takes away the actual essence of TypeScript!