principletypescriptCritical
'unknown' vs. 'any'
Viewed 0 times
anyunknownstackoverflow
Problem
TypeScript 3.0 introduces
unknown is now a reserved type name, as it is now a built-in type.
Depending on your intended use of unknown, you may want to remove the
declaration entirely (favoring the newly introduced unknown type), or
rename it to something else.
What is difference between
unknown type, according to their wiki:unknown is now a reserved type name, as it is now a built-in type.
Depending on your intended use of unknown, you may want to remove the
declaration entirely (favoring the newly introduced unknown type), or
rename it to something else.
What is difference between
unknown and any? When should we use unknown over any?Solution
You can read more about
[..] unknown which 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. Likewise, no operations are permitted on an unknown without first asserting or narrowing to a more specific type.
A few examples:
The suggested usage is:
There are often times where we want to describe the least-capable type in TypeScript. This is useful for APIs that want to signal “this can be any value, so you must perform some type of checking before you use it”. This forces users to safely introspect returned values.
unknown in the PR or the RC announcement, but the gist of it is:[..] unknown which 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. Likewise, no operations are permitted on an unknown without first asserting or narrowing to a more specific type.
A few examples:
let vAny: any = 10; // We can assign anything to any
let vUnknown: unknown = 10; // We can assign anything to unknown just like any
let s1: string = vAny; // Any is assignable to anything
let s2: string = vUnknown; // Invalid; we can't assign vUnknown to any other type (without an explicit assertion)
vAny.method(); // Ok; anything goes with any
vUnknown.method(); // Not ok; we don't know anything about this variableThe suggested usage is:
There are often times where we want to describe the least-capable type in TypeScript. This is useful for APIs that want to signal “this can be any value, so you must perform some type of checking before you use it”. This forces users to safely introspect returned values.
Code Snippets
let vAny: any = 10; // We can assign anything to any
let vUnknown: unknown = 10; // We can assign anything to unknown just like any
let s1: string = vAny; // Any is assignable to anything
let s2: string = vUnknown; // Invalid; we can't assign vUnknown to any other type (without an explicit assertion)
vAny.method(); // Ok; anything goes with any
vUnknown.method(); // Not ok; we don't know anything about this variableContext
Stack Overflow Q#51439843, score: 1070
Revisions (0)
No revisions yet.