程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

七爪源码:TypeScript -“任何”和“未知”类型之间的区别

balukai 2025-05-14 11:57:38 文章精选 1 ℃

我的猜测是你已经知道 TypeScript 是 JavaScript 的“风味”。

本文假设您或多或少都熟悉这两者。 不过,我将首先简要介绍 TypeScript。

基本上,TypeScript 是添加了类型语法的 JavaScript。 W3Schools 将 TypeScript 定义为 JavaScript 的语法超集,它添加了静态类型。 这基本上意味着 TypeScript 在 JavaScript 之上添加了语法,允许开发人员添加类型。

TypeScript 原始类型

以下是 TypeScript 中的主要原始类型:

boolean — 真或假值

number — 整数和浮点值

string — 用引号括起来的文本值。 例如 “TypeScript 很棒”

any — 禁用类型检查并有效地允许使用所有类型

unknown - 类似于任何但更安全的替代方案

never — 定义时有效地抛出错误

您一定已经注意到上面对 any 和 unknown 类型的描述之间的歧义。 这使我们进入了今天讨论的核心。


‘any’和‘unknown’类型的区别

我将介绍 any 和 unknown

1.TypeScript 强制我们在处理未知值之前确定它的类型,但它不会处理任何值。

例子:

let anyValue: any = 1;
let unknownValue: unknown = 1;anyValue.helloworld(); // No error
unknownValue.helloWorld();  // we get a TypeScript error

2. 我们不能将 unknown 分配给除自身或 any 之外的任何事物,而我们可以将 any 分配给任何事物。

例子:

let anyValue: any = 1;
let unknownValue: unknown = 1;let str: string;str = anyValue; // No error
str = unknownValue; // We get a TypeScript error

如您所见,这些约束确保我们在使用 unknown 值之前对其进行验证,这对于减少运行时错误的可能性很重要。

让我们看几个用例:


用例 1- 描述未知值:

我们可以使用 unknowntype 来描述我们不知道的值。 例如,从网络调用返回的值:

let data: unknown = getSomeValueFromSomeWhere();if (typeof data === 'string') {
   //data is a string.
} else if (Array.isArray(data)) {
   //data is an array.
} else if (typeof data === 'object') {
   //data is an object.
}


用例 2 - 在类型断言中:

在 TypeScript 中,类型断言是一种通知编译器变量类型的技术。 类型断言类似于类型转换,但它不重构代码。 我们可以使用类型断言来指定一个值的类型,并告诉编译器不要推断它。

但是,我们不能简单地断言一个值可以具有我们想要的任何类型。 我们不能断言一个值的类型与该值的实际类型不重叠。

例子:

let value = '1' as number; // Error, we can't say that a string is a numberinterface Vehicle {
  name: string;
  model: string;
}function buyVehicle(vehicle: Vehicle){}buyVehicle({niceVehicle: ''} as Vehicle); // Error, this object doesn't have the required properties of the Vehicle interface.

断言值的类型与值的实际类型不重叠的一种解决方法是首先断言该值是未知的:

buyVehicle({niceVehicle: ''} as unknown as Vehicle)

但是,我们应该避免这种解决方法,因为它只会使我们的代码不安全。


结论

类型 any 和 unknown 是 TypeScript 中的两种基本类型,有时可以派上用场。

any 可能是解决错误的有用方法,因为它禁用类型检查,但 TypeScript 将无法提供类型安全,并且依赖于类型数据的工具(例如自动完成)将不起作用。

unknown 最好在我们不知道要输入的数据类型时使用。 稍后要添加类型,我们需要对其进行强制转换。

注意:我们应该尽可能避免使用 any。


更多APP/小程序/网站源码资源,请搜索"七爪网源码交易平台"!

最近发表
标签列表