网站首页 > 文章精选 正文
我的猜测是你已经知道 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/小程序/网站源码资源,请搜索"七爪网源码交易平台"!
- 上一篇: TypeScript 终极初学者指南
- 下一篇: 一文说明白,TypeScript 的类
猜你喜欢
- 2025-05-14 TS,TypeScript,Windows环境下构建环境,安装、编译且运行
- 2025-05-14 TypeScript 也能开发AI应用了!
- 2025-05-14 搞懂 TypeScript 装饰器
- 2025-05-14 前端小哥哥:如何使用typescript开发实战项目?
- 2025-05-14 在 React 项目中,一般怎么处理错误?
- 2025-05-14 react19 常用状态管理
- 2025-05-14 Vue3开发极简入门(2):TypeScript定义对象类型
- 2025-05-14 C#与TypeScript语法深度对比
- 2025-05-14 360前端一面~面试题解析
- 2025-05-14 Python标准库中的七个“小众但神奇”的实用函数
- 05-14TS,TypeScript,Windows环境下构建环境,安装、编译且运行
- 05-14TypeScript 也能开发AI应用了!
- 05-14搞懂 TypeScript 装饰器
- 05-14前端小哥哥:如何使用typescript开发实战项目?
- 05-14在 React 项目中,一般怎么处理错误?
- 05-14react19 常用状态管理
- 05-14Vue3开发极简入门(2):TypeScript定义对象类型
- 05-14C#与TypeScript语法深度对比
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)