TypeScript
Typescript¶
概述¶
TypeScript(简称 TS)是微软公司开发的一种基于 JavaScript (简称 JS)语言的编程语言
TS是JS的超集,在兼容JS的基础上,他完善了JS类型系统,并增加了许多特性
使用TS,可以使用tsc 编译生成.js文件,使用tsx 热加载并运行TS文件
类型系统¶
类型的意义¶
类型是人为添加的一种编程约束和用法提示,它能
- 帮助开发者进行错误排查,尽早发现错误
- 完善函数的定义,提示开发者如何使用
- 利于发挥IDE提示、补全、纠错功能
JS的变量是动态类型,变量的类型、属性缺乏约束
TS引入了静态类型,他需要额外的工作量去编写类型声明,但更加规范、稳定
TS可能会丧失灵活性,增加工作量,这使得他不一定适合短期、小型的项目
但是由于纠错、重构、合作的巨大改进,大多情况下TS是值得的,特别是大型项目
类型声明¶
let foo:string; //在变量后使用冒号进行类型声明
let num = 123; //未进行声明时会自动进行类型判断
function toString(num:number||null):string { //函数的类型声明
return String(num); //使用联合类型
}
let s:unknown = 'hello'; //使用unknow的顶层类型,需要在判断后进行调用
if (typeof s === 'string') {
s.length; // 正确
}
let rep = requst() as Response //强制确定类型
对于复用的类型,可以用type进行声明
类型判断¶
未进行声明的变量,编译器会自动推断变量类型
如果无法推断,他会将变量标记为any,他是所有类型的全集!(同时会污染正常的变量)
如果不想被推断为any,可以开启noImplicitAny编译选项
基础类型¶
原始类型¶
- boolean
- string
- number
- bigint
- symbol
上面这五种原始类型的值,都有对应的包装对象(wrapper object)
包装对象,指的是这些值在需要时,会自动产生的对象。
const s = new String('hello');
typeof s // 'object'
s.charAt(1) // 'e'
对象类型¶
小写的object类型代表 JavaScript 里面的狭义对象,即对象、数组和函数
obj = { foo: 123 };
const {val:foo} = obj; //解构赋值用于直接从对象中提取属性。
let { x: foo, y: bar }
: { x: string; y: number } = obj; //指定x,y类型
函数类型¶
( ) => ( )是函数的标识
const repeat = (
str:string="", //可以使用默认值
times?:number //使用?表示可选
):string => str.repeat(times); //():表示返回值
function sum(
{ a, b, c }: {
a: number;
b: number;
c: number //变量解构/对象类型
} //避免冲突,故typescript对象的类型声明另起
) {console.log(a + b + c);}