和 [[JavaScript Syntax]] 语法相同:
数组
数组的编号和 Python 一样是从 0 开始,也同样使用 [] 表示。定义时,TS 数组即在 TS 原始数据类型后面加 []
:
数组里的数据 | 类型写法 1 | 类型写法 2 |
---|
字符串 | string[] | Array<string> |
数值 | number[] | Array<number> |
布尔值 | boolean[] | Array<boolean> |
大整数 | bigint[] | Array<bigint> |
符号 | symbol[] | Array<symbol> |
不存在 | null[] | Array<null> |
未定义 | undefined[] | Array<undefined> |
遍历
也可以使用 for…in 循环语句遍历:
方法
转换
- .toString():数组转字符串(逗号分隔)
- .join():数组转换为自定义分隔字符
添加
- .push():末尾添加新元素(可一次性添加多个)
- .unshift():开头添加新元素(可一次性添加多个)
移除
- .pop():移除末尾元素
- .shift():移除首个元素
查找
- .indexOf():从前往后查找,若无返回 -1
- .lastIndexOf():从后往前查找,若无返回 -1
- findIndex():自定义查找
排序
- .sort():按指定规则排序
- .reverse():反转顺序
对于 number[]
,使用 .sort()
排序时会先转换为字符串,然后再进行排序,因此 “11”,会在 “2” 前面,如果要避免此类问题,需要编写自定义排序函数:
合并与裁剪
- .splice():从指定位置开始,删除指定个数,并插入指定值
- .concat():合并数组(支持多个)
- .slice():从第 n 个元素之后开始裁剪,并返回(包含第 n 个元素)
- .reduce():根据函数遍历
- .reduceRight():
.reduce()
的反向
元组
元组是 [[TypeScript]] 独有的新类型,通常用于表示长度较固定的数组,并可分别指定每个元素的类型,编译后在 [[JavaScript]] 中代码类型依然是数组。
元组在修改时,长度和类型必须和原来的保持一致。
函数
TS 和 JS 的区别是在入参处和返回值增加了类型。
- 无返回值函数:使用
void
定义(和 null
、undefined
不可混用)
声明
命名函数
匿名函数
箭头函数
箭头函数在许多场景下可以取代传统的[[#匿名函数]],使代码更加简洁和易于维护。
方法函数定义
自调用函数
在声明[[#匿名函数]]时将声明语句包裹在圆括号内,并同时在表达式最后补上圆括号即可。
参数
可选参数
可选参数在参数名后面加 ?
实现:
另外,可选参数必须在参数的尾部。
默认参数
默认参数在参数定义后面加 =
和默认值设置:
剩余参数
剩余参数可传递多个不确定的参数:
重载
同时拥有多个调用签名的函数即为重载函数,这些签名拥有不同的参数个数和类型,可以执行不同的代码逻辑:
- 没有函数体的函数声明:它们都是重载签名,当调用该函数时,只能以符合这些签名之一的形式来调用函数。
- 拥有函数体的函数声明:它并非重载签名,而是针对所有重载签名的具体实现,它的对应位置的参数类型和返回值类型必须能兼容前面所有重载签名中的类型。
[[Array]]
表达式形式声明
以表达式形式声明实现时,返回值必须显式声明:
对象
TS 中的对象和 Python 的字典格式类似,一个重要区别是 TS 可以在对象中直接声明一个函数。
定义对象语法:
- type:类型别名
- interface:接口只能描述对象类型,不能用于描述非对象类型;
- object:TS 新增类型,用于表示非原始类型(如 number, string, boolean, bigint 等)
- Object:对象类型(不推荐)
- {}:没有属性或方法的初始空对象(不推荐)
表面上主要区别除了前缀不同之外,一个有 =
号,另一个没有。另外对象的命名一般使用[[大驼峰式命名法]]。
修饰符
?
:可选
readonly
:只读
[key: string]
:索引签名
- 字符串索引:键只能是字符串
- 数值索引:键只能是数值
合并
继承
在 TS 中接口的继承通过 extends
关键字实现:
在继承时可通过 Omit
省略不需要的属性:
其中 T 代表已有的一个对象类型, K 代表要删除的属性名,如果只有一个属性就直接是一个字符串,如果有多个属性,用 | 来分隔开:
接口继承中如果存在同名属性,但类型不同会导致编译错误。
交叉类型
通过 &
符号连接多个类型。
声明合并
当同时声明多个同名接口时,会自动合并为一个接口。
类
TS 中类的关键字和 Python 一样,都是通过 class
声明:
继承
[[#对象]] 继承类:
如果类中包含方法,接口在继承的时候,需要响应的实现,或者通过 Omit
去除。