typescript学习整理

本文介绍TypeScript作为JavaScript的超集,如何通过增加类型系统提升代码的可读性和可维护性,以及如何在编译阶段发现错误。同时,文章详细解释了原始数据类型、任意值类型、类型推论和联合类型等概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是 TypeScript

TypeScript 是 JavaScript 的类型的超集,它可以编译成纯 JavaScript。编译出来的 JavaScript 可以运行在任何浏览器上。TypeScript 编译工具可以运行在任何服务器和任何系统上。TypeScript 是开源的。

为什么选择 TypeScript

TypeScript 增加了代码的可读性和可维护性
类型系统实际上是最好的文档,大部分的函数看看类型的定义就可以知道如何使用了
可以在编译阶段就发现大部分错误,这总比在运行时候出错好
增强了编辑器和 IDE 的功能,包括代码补全、接口提示、跳转到定义、重构等
TypeScript 非常包容
TypeScript 是 JavaScript 的超集,.js 文件可以直接重命名为 .ts 即可
即使不显式的定义类型,也能够自动做出类型推论
可以定义从简单到复杂的几乎一切类型
即使 TypeScript 编译报错,也可以生成 JavaScript 文件
兼容第三方库,即使第三方库不是用 TypeScript 写的,也可以编写单独的类型文件供 TypeScript 读取
TypeScript 拥有活跃的社区
大部分第三方库都有提供给 TypeScript 的类型定义文件
Google 开发的 Angular2 就是使用 TypeScript 编写的
TypeScript 拥抱了 ES6 规范,也支持部分 ESNext 草案的规范

安装 TypeScript

TypeScript 的命令行工具安装方法如下:

npm install -g typescript

以上命令会在全局环境下安装 tsc 命令,安装完成之后,我们就可以在任何地方执行 tsc 命令了。
编译一个 TypeScript 文件很简单:

tsc hello.ts

我们约定使用 TypeScript 编写的文件以 .ts 为后缀,用 TypeScript 编写 React 时,以 .tsx 为后缀。

TypeScript 中,使用 : 指定变量的类型,: 的前后有没有空格都可以。
TypeScript 只会进行静态检查,如果发现有错误,编译的时候就会报错。
TypeScript 编译的时候即使报错了,还是会生成编译结果,我们仍然可以使用这个编译之后的文件,如果要在报错的时候终止 js 文件的生成,可以在 tsconfig.json 中配置 noEmitOnError 即可。

原始数据类型

原始数据类型包括:布尔值、数值、字符串、null、undefined

let isDone: boolean = false;
let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
// ES6 中的二进制表示法
let binaryLiteral: number = 0b1010;
// ES6 中的八进制表示法
let octalLiteral: number = 0o744;
let notANumber: number = NaN;
let infinityNumber: number = Infinity;
let myName: string = 'Tom';
// 模板字符串
let sentence: string = `Hello, my name is ${myName}.
I'll be ${myAge + 1} years old next month.`;

JavaScript 没有空值(Void)的概念,在 TypeScript 中,可以用 void 表示没有任何返回值的函数:

function alertName(): void {
    alert('My name is Tom');
}

声明一个 void 类型的变量没有什么用,因为你只能将它赋值为 undefined 和 null:

let unusable: void = undefined;

Null 和 Undefined
在 TypeScript 中,可以使用 null 和 undefined 来定义这两个原始数据类型:

let u: undefined = undefined;
let n: null = null;

与 void 的区别是,undefined 和 null 是所有类型的子类型。也就是说 undefined 类型的变量,可以赋值给 number 类型的变量:

// 这样不会报错
let num: number = undefined;
// 这样也不会报错
let u: undefined;
let num: number = u;

而 void 类型的变量不能赋值给 number 类型的变量:

let u: void;
let num: number = u;

什么是任意值类型
任意值(any)用来表示允许赋值为任意类型。声明一个变量为任意值之后,对它的任何操作,返回的内容的类型都是任意值。变量如果在声明的时候,未指定其类型,那么它会被识别为任意值类型:

let something;
something = 'seven';
something = 7;

something.setName('Tom');

什么是类型推论
如果没有明确的指定类型,那么 TypeScript 会依照类型推论(Type Inference)的规则推断出一个类型。
TypeScript 会在没有明确的指定类型的时候推测出一个类型,这就是类型推论。
如果定义的时候没有赋值,不管之后有没有赋值,都会被推断成 any 类型而完全不被类型检查:

let myFavoriteNumber;
myFavoriteNumber = 'seven';
myFavoriteNumber = 7;

联合类型
联合类型(Union Types)表示取值可以为多种类型中的一种。

let myFavoriteNumber: string | number;
myFavoriteNumber = 'seven';
myFavoriteNumber = 7;

联合类型使用 | 分隔每个类型。
这里的 let myFavoriteNumber: string | number 的含义是,允许 myFavoriteNumber 的类型是 string 或者 number,但是不能是其他类型。

当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型里共有的属性或方法:

function getLength(something: string | number): number {
    return something.length;
}

上例中,length 不是 string 和 number 的共有属性,所以会报错。
访问 string 和 number 的共有属性是没问题的:

function getString(something: string | number): string {
    return something.toString();
}

联合类型的变量在被赋值的时候,会根据类型推论的规则推断出一个类型:

let myFavoriteNumber: string | number;
myFavoriteNumber = 'seven';
console.log(myFavoriteNumber.length); // 5
myFavoriteNumber = 7;
console.log(myFavoriteNumber.length); // 编译时报错
### 关于 TypeScript 22 版本或课程的相关内容 目前官方并未发布名为“TypeScript 22”或者“TypeScript 第22课”的具体版本或教程。然而,可以推测您可能希望了解的是关于 TypeScript 的某个特定更新版本的内容或者是某在线平台上的系列课程中的第22节课。 #### 官方版本历史 TypeScript 的版本迭代通常以年份为基础进行命名,例如 TypeScript 4.x 或者 TypeScript 5.x 系列[^1]。如果提到“TypeScript 22”,可能是对某种非正式称呼的误解。最新的稳定版可以通过官方文档获取更多信息。 #### 在线教育平台的可能性 如果您指的是某些在线学习平台上有关 TypeScript 的教学视频或文章,则建议查看以下资源: - **Udemy**: 提供大量针对不同技能水平的学习者设计的 TypeScript 教程。 - **Pluralsight**: 高质量的技术培训服务提供商之一,其中涵盖了深入探讨 TypeScript 功能的各种课程。 - **Coursera/edX**: 这些网站上也可能存在由大学教授主导讲解现代 JavaScript 开发工具链(含TS部分)的专业化项目。 以下是基于已有资料整理出来的几个重点概念复习方向: #### 数据类型的回顾 作为静态类型检查器的一部分,typescript引入了许多内置的数据类型用于增强js的安全性和可维护性: ```typescript let isDone: boolean = false; // 布尔型变量声明实例演示. const piValue: number = Math.PI ;// 数字常量定义方式举例说明. var userName:string="John Doe"; // 字符串初始化方法展示. ``` 另外还有复合结构如数组与元组等也值得再次巩固理解其区别及应用场景. #### 类型保护机制详解 通过类型守卫(Type Guards),开发者可以在运行时期间验证表达式的实际类别从而实现更加精确的操作控制逻辑编写.[^2] 最后需要注意特殊值处理方面的小技巧:`null` 和 `undefined`,尽管它们单独构成了各自的分类但在大多数情况下会被自动包含到其他基础数据种类之中除非特别指明排除关系.[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值