Note: If you are new to TypeScript, check out Getting Started with TypeScript tutorial first.
The unknown data type in TypeScript holds any value, but requires type verification before operations can be performed.
Here's a simple example of the unknown type. You can read the rest of the tutorial to learn more.
Example
let userInput: unknown = "Hello";
// Type checking
if (typeof userInput === "string") {
    // Now it's safe to use string methods
    console.log(userInput.toUpperCase());  
}
// Output: HELLO
Here, userInput is declared as unknown, and to perform string operations, we must first verify it's a string through type checking.
Declare an unknown type Variable
To declare a variable with the unknown type, you simply use the unknown keyword in the type annotation. For example,
let variableName: unknown;
Declaring a variable as unknown informs the compiler that the variable type is not yet known and will be determined later.
Using unknown with Function
We can also use unknown in the function argument type. For example,
function handleData(input: unknown) {
    // Check if the input is an array
    if (Array.isArray(input)) {
        console.log(input);
    }
    // Check if the input is a string
    else if (typeof input === "string") {
        console.log(input.toUpperCase());
    }
}
// Call the function with different types of inputs
handleData("programiz");          
handleData([1, 2, 3]);    
Output
PROGRAMIZ [1, 2, 3]
Here, the function handleData() uses if-else conditions to determine the nature of input. 
- It checks if 
inputis an array usingArray.isArray(input). Iftrue, it logs the array. - If 
inputis a string, as checked bytypeof input === "string", it logs the string in uppercase. 
TypeScript any vs unknown
any and unknown are both TypeScript types that can hold any value, but they differ in how they enforce type safety:
any Type
It allows operations on any type without checks, which can lead to potential runtime errors. For example,
let value: any = "Hello";
// Works fine, outputs: "HELLO"
console.log(value.toUpperCase());
value = 123;
// No error at compile time, but will crash at runtime
console.log(value.toUpperCase());
unknown Type
It requires explicit type checking before operations, enhancing code safety. Consider a variable value declared as unknown. 
let value: unknown = "Hello";
Since unknown is a type-safe counterpart to any, TypeScript enforces checks before performing any operations on value:
if (typeof value === "string") {
    console.log(value.toUpperCase()); 
}
Directly calling the toUpperCase() method on value would result in a compile-time error because TypeScript requires explicit confirmation of the type before performing type-specific operations.
let value: unknown = "Hello";
// Runtime Error: 'value' is of type 'unknown'
console.log(value.toUpperCase());
Using unknown prevents the runtime error. 
Also Read: