Skip to content

TypeScript 中 unknown 与 any 的区别

Posted on:2024年6月14日 at 14:20

在 TypeScript 3.0 中,新增了一个名为 unknown 的类型。根据 TypeScript 文档的描述,unknown 是一个内置的类型,任何类型的值都可以赋值给 unknown,但 unknown 类型的值只能赋值给 unknownany 类型。这意味着 unknown 是类型安全的 any 类型。那么,unknownany 有什么区别呢?我们应该在什么时候使用 unknown 而不是 any 呢?本文将详细探讨这些问题。

anyunknown 的基本区别

何时使用 unknown 而不是 any

unknown 类型通常用于需要更严格的类型检查的场景。使用 unknown 可以确保开发者在使用值之前执行适当的类型检查,从而提高代码的类型安全性。这在设计 API 时尤其有用,因为它能强制调用者在使用返回值前进行类型检查。

示例:使用 unknown 进行类型检查

function doSomething(value: unknown) {
  if (typeof value === "string") {
    console.log(value.toUpperCase()); // 允许,经过类型检查,value 被识别为 string
  } else {
    console.log("Not a string");
  }
}

doSomething("Hello");
doSomething(10);

在上述代码中,doSomething 函数接收一个 unknown 类型的参数。我们在使用 value 之前进行了类型检查,确保只有在 value 是字符串时才调用 toUpperCase 方法。

总结

unknownany 都可以持有任何类型的值,但它们在类型检查上的行为有所不同。any 允许在不进行任何类型检查的情况下进行任何操作,而 unknown 则强制开发者在使用值之前进行类型检查。因此,在需要类型安全的场景下,建议优先使用 unknown

通过了解和使用 unknown 类型,我们可以编写出更加健壮和类型安全的 TypeScript 代码。希望本文能帮助你更好地理解 unknownany 的区别,并在合适的场景中正确使用它们。