TypeScript教程学习笔记

因为研究 Pi Agent 源代码,发现都是 TypeScript 编写的,因此找了阮一峰的TypeScript教程熟悉一下 TypeSCript 语法。

简介

TypeScript(简称 TS)是微软公司开发的一种基于 JavaScript (简称 JS)语言的编程语言。
TypeScript 对 JavaScript 添加的最主要部分,就是一个独立的类型系统。

基本用法

any类型

类型系统

bigint 类型包含所有的大整数。

1
2
const x:bigint = 123n;
const y:bigint = 0xffffn;

所谓“包装对象”,指的是这些值在需要时,会自动产生的对象。
由于包装对象的存在,导致每一个原始类型的值都有包装对象和字面量两种情况。

联合类型(union types)指的是多个类型组成的一个新类型,使用符号|表示。
联合类型A|B表示,任何一个类型只要属于A或B,就属于联合类型A|B。

1
2
3
4
let x:string|number;

x = 123; // 正确
x = 'abc'; // 正确

数组

元组

元组(tuple)是 TypeScript 特有的数据类型,JavaScript 没有单独区分这种类型。它表示成员类型可以自由设置的数组,即数组的各个成员的类型可以不同。
元组成员的类型可以添加问号后缀(?),表示该成员是可选的。

1
let a:[number, number?] = [1];

扩展运算符(…)将数组(注意,不是元组)转换成一个逗号分隔的序列,这时 TypeScript 会认为这个序列的成员数量是不确定的,因为数组的成员数量是不确定的。

1
2
3
4
5
6
7
const arr:[number, number] = [1, 2];

function add(x:number, y:number){
// ...
}

add(...arr) // 正确

symbol类型

Symbol 是 ES2015 新引入的一种原始类型的值。它类似于字符串,但是每一个 Symbol 值都是独一无二的,与其他任何值都不相等。

1
2
3
4
let x:symbol = Symbol();
let y:symbol = Symbol();

x === y // false

函数

可选参数:

如果函数的某个参数可以省略,则在参数名后面加问号表示。

1
2
3
4
5
6
function f(x?:number) {
// ...
}

f(); // OK
f(10); // OK

函数的可选参数只能在参数列表的尾部,跟在必选参数的后面。

rest 参数表示函数剩余的所有参数,它可以是数组(剩余参数类型相同),也可能是元组(剩余参数类型不同)。

1
2
3
4
5
6
7
8
9
// rest 参数为数组
function joinNumbers(...nums:number[]) {
// ...
}

// rest 参数为元组
function f(...args:[boolean, number]) {
// ...
}

对象

除了原始类型,对象是 JavaScript 最基本的数据结构。

interface

参考链接

  1. TypeScript 教程,by 阮一峰.