ts的名字相信大家或多或少都有耳闻,ts即
type script类型规范的脚本语言。通过ts我们可以解决因为js动态语言引起的问题,多人开发中尤为重要。
笔者撰写文章时最新版本为: ts 3.1
一、Ts简单介绍
ts是js的超集,拓展了js内容,就像sass和css的关系,我们通过ts提升编写代码的体验和效率,但ts需要被编译成js才能执行。本质上我们学习使用ts就像驯服容易乱咬人的js小狗狗。
ts的编译器可以是npm上的插件typescript,或则直接是webpack配置的对应loader,只是一种将写好的ts转换成js的手段。
官方指出,有两种主要的方式来获取TypeScript工具:通过npm和Visual Studio的TypeScript插件
二、Ts环境
这里讲解基于
vscode和npm插件typescript。
安装ts编译器(环境)
通过终端指令全局安装插件typescript。
cnpm i -g typescript
编译ts文件
我们创建ts文件(hw.ts)写入打印语句:
console.log('hi!')
终端执行编译指令:
tsc .\hw.ts
默认编译成es5语法(let=》var),以此向下兼容,通过配置可以按需兼容。
可以看到编译后产生的js文件:
编译配置文件
其实ts的编译是可控的,可以去设置严格程度和其他一些编译选择。本篇文章提出这个知识但不会深入讲解,而是留到下篇文章进行探讨。通过ts配置新手可以很好的学习ts的使用,同时熟练的程序员可以根据需要定制编译效果。
初始化配置文件tsconfig.json:
tsc --init
三、使用Ts
1.基本语法(type)
说完环境的准备我们开始进行语法的讲解。
设置变量类型
通过在声明变量时在变量名添加冒号+数据类型就可以静态固定该变量的类型。
let a: number;
声明完后我们只能向变量a赋值对应的值,如果不匹配类型就会出现红线提示,同时编译也会报错。
默认配置情况下即使存在编译报错,也能编译产生js文件。
如果我们不使用上面ts语法,ts也会在变量第一次赋值过后隐式的固定变量的类型。
let a;//注意这里等效 let a: any; 后面将讲解any。
a = "123";
let b = "321";// 等效于 let b: string = "321";
设置函数签名
js的函数将js的动态性发挥得很好,通过ts我们限制函数的语法,使之接近静态语言的语法。
我们可以选择在声明函数时固定传参的类型,同时ts会拒绝不定参数的写法:
function fn(num:number,str:string){
console.log('12')
};
fn(123,"321");//调用函数时必须要严格满足参数类型和参数数量。
固定返回值类型:
function fn() :string{
return 'ok'
};
这里总体和静态语言是类似的,要求一一对应,否则提示报错,学习过c语言或java会很容易上手。
2.基本类型
基本类型总展示
- 总结上述的语法:
let 变量: 类型;
let 变量: 类型 = 值;
function fn(参数: 类型, 参数: 类型): 类型{
......
}
- 手动搬运类型表格: ( 常用,特殊使用案例和部分类型未展示 )
| 数据类型 | 关键字 | 描述 |
|---|---|---|
| 任意类型 | any | 声明为 any 的变量可以赋予任意类型的值,声明变量但不赋值时默认的类型,不建议使用。 |
| 字面量类型 | 任意值 | 声明后变量只能赋值该任意值 |
| 数字类型 | number | 双精度 64 位浮点值。它可以用来表示整数和分数。 |
| 字符串类型 | string | 一个字符系列,使用单引号(')或双引号(")来表示字符串类型。反引号(`)来定义多行文本和内嵌表达式。 |
| 布尔类型 | boolean | 表示逻辑值:true 和 false。 |
| 数组类型 | 数据类型[] | 声明变量为数组。 |
| void | void | 用于标识方法返回值的类型,表示该方法没有返回值。 |
| null | null | 表示对象值缺失。 |
| undefined | undefined | 用于初始化变量为一个未定义的值 |
下面讲解的围绕一些特殊语法。
或 类型语法
通过 | 或运算符,我们可以给一个变量定义为两及以上个类型,即可以存在两种类型情况。
let b: '2' | number = 324 ;
let b: (false | number | string)[] = [ 324 , false , 'str' ] ;
这里变量b的类型,我们称之为联合类型(可以理解为any是最大的联合类型,其实any是关闭Ts类型检测)。
与 类型语法
通过 & 与运算符,我们将多个类型同时限制给变量。这里我们并不是去做类似number和string类型同时满足的矛盾情况,而是配合动态类型的特点,进行动态编程:
let c: 类型常量1 & 类型常量2
这里通常类型常量1包含2,2是动态变化,用于缩小明确c变量的类型范围。
自定义类型
通过 type 关键字,我们可以自定义一些类型常量,利于动态编程。例如:
type Second = number | string ;
const numstr : Second ;
numstr = 12 ;
numstr = '13' ;
这里Second既是number类型又是string类型。