TypeScript unknown 类型

注意:如果您是 TypeScript 新手,请先查看 TypeScript 入门 教程。


TypeScript 中的 unknown 数据类型可以保存任何值,但在执行操作之前需要进行类型验证。

以下是 unknown 类型的一个简单示例。您可以阅读本教程的其余部分以了解更多信息。

示例

let userInput: unknown = "Hello";

// Type checking
if (typeof userInput === "string") {
    // Now it's safe to use string methods
    console.log(userInput.toUpperCase());  
}

// Output: HELLO

在此,userInput 被声明为 unknown,并且要执行字符串操作,我们必须首先通过类型检查来验证它是否为字符串。


声明一个 unknown 类型变量

要使用 unknown 类型声明变量,只需在类型注解中使用 unknown 关键字即可。例如:

let variableName: unknown;

将变量声明为 unknown 会告知编译器该变量的类型尚不确定,将在稍后确定。


在函数中使用 unknown

我们也可以在函数参数类型中使用 unknown。例如:

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]);    

输出

PROGRAMIZ
[1, 2, 3]

这里,函数 handleData() 使用 if-else 条件来确定 input 的性质。

  • 它使用 Array.isArray(input) 检查 input 是否为数组。如果为 true,则会记录该数组。
  • 如果 input 是字符串,如 typeof input === "string" 所示,它将以大写形式记录该字符串。

TypeScript any vs unknown

anyunknown 都是 TypeScript 中可以保存任何值的类型,但它们在强制执行类型安全方面有所不同。

any 类型

它允许在不进行检查的情况下对任何类型执行操作,这可能导致潜在的运行时错误。例如:

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 类型

它要求在执行操作之前进行显式类型检查,从而提高了代码的安全性。考虑一个声明为 unknown 的变量 value

let value: unknown = "Hello";

由于 unknownany 的类型安全对应项,TypeScript 会在对 value 执行任何操作之前强制执行检查。

if (typeof value === "string") {
    console.log(value.toUpperCase()); 
}

直接在 value 上调用 toUpperCase() 方法会产生编译时错误,因为 TypeScript 要求在执行类型特定操作之前显式确认类型。

let value: unknown = "Hello";

// Runtime Error: 'value' is of type 'unknown'
console.log(value.toUpperCase());

使用 unknown 可以防止运行时错误。


另请阅读

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战