typescript的基础用法,教你如何开始尝试写ts
哈喽哈喽,我是你们的金樽清酒,今天是跟着阮一峰老师学习typescript的第二天。回顾上一篇文章我们初步了解了什么是ts。ts就是js的超集,就是为了扩展js的功能而开发的在js上的最核心最重要的改动就是加了一个类型判断。新增的类型信息可以帮助开发者在开发阶段找到js运行阶段才能发现的问题,提高代码的健壮性,非常适合大型的项目开发。(写这篇文章是为了自己更好的学习ts,是看了阮一峰老师写的博客学习的,所以介绍的思路也是按照阮一峰老师的思路)
类型声明
ts相对于js来说最核心的就是类型声明。啥叫类型声明。在学校里面,你可能学过c语言,c++或者java等后端语言,它们都是强数据类型的,举个例子说,c语言要声明一个变量,你必须声明这个变量的类型。比如声明一个整型变量a,在c语言里面是int a,而在js当中是用let、var、const来定义变量的,而且不进行赋值语句之前不知道这个变量的类型,让我们看看ts是怎么声明的吧。
ts
let hellow:string;
在声明的变量名(严格的来说叫标识符)后面加上冒号以及类型,这就是ts的类型声明。添加了类型声明之后,这个变量的赋值只能是这种类型,不然的话就会出现报错,这个就是类型声明的作用,在开发阶段找到隐藏的错误,一个标识符只有一种类型,能让代码的健壮性大大提高,减少潜在的风险。
函数的的返回值类型和参数的类型也是如此定义
ts
function add(num1:number,num2:number):number{
return num1+num2
}
在声明了类型之后,如果函数的返回值,或者变量不是该类型,那么就会出现报错。
声明了变量但是未定义的时候也会发生报错,而js是undefiened
ts
const hellow:string;
console.log(hellow)//报错
类型推断
在写ts的时候,其实类型说明不是必须要加的。因为ts会进行一个类型判断,什么意思呢?举个例子
ts
let a=1
a='hellow'//报错
虽然这个a我们没有给它类型声明,但是它会根据第一次的赋值来推断出它的类型。相当于自己加了一个类型声明,所以我们后续将number类型的a赋值成字符串类型的a,所以会出现报错。
TypeScript 也可以推断函数的返回值。
ts
function toString(num:number) {
return String(num);
}
在圆括号后面呀,我没有加冒号➕类型,所以我没有对它进行类型声明。但是ts会自动推断返回值的类型。也就是说js的代码在ts当中都能运行,但是ts存在一个类型判断,可能就会出现类型错误。 所以,ts是否加类型声明是可选的,在js转为ts时可以慢慢添加所需的值。
Typescript的的编译
我们都知道js可以在node.js以及浏览器中运行。那么ts要怎么运行呢?其实吧,我感觉这个跟vue等框架差不多,归根结底都得回到底层。vue文件最终还是编译成前端三件套。我们的ts能,在运行之前要先进行编译,编译成低版本的js代码才能运行。类型判断只发生编译阶段不发生在运行阶段,所以说可以在运行之前就能发现类型的错误。
值是值,类型是类型
从上面我们可以看出ts可以进行一个类型声明,但是,类型声明不一定得写,因为ts存在一个类型推断的机制。所以值是值,类型是类型,而且ts代码最终会转化成js来运行。所以ts能完全运行js,少了类型就跟js差不多了。用来做一些js项目的重构特别的方便,可以慢慢的进行修改,而不会导致重构时的项目崩溃。
如何运行ts
- 上面提到,要运行ts代码首先要把ts编译成js来运行。那我们如何去编译ts呢? typescript官网有一个在线的运行平台TypeScript Playground。,就像一个网页一样,把ts代码复制进去就可以运行代码。
在右边的界面可以展示ts运行的结果。
- tsc编译器 ts文件的后缀是.ts,js文件的后缀是.js。所以tsc编译器的功能就是把.ts后缀的文件转化成.js后缀的文件,然后放在浏览器或者node.js当中运行。 ts编译器如何安装使用可以看阮一峰老师的博客。
总结
ts可以进行类型声明,但类型声明不是必选项,因为ts还存在类型推断。赋值之后会自动进行类型的推断,所以可以省略。也因此js的代码可以被ts很好的兼容。ts没有专门的运行环境,它要先通过编译成低版本的js来运行。类型判断发生在编译阶段,不再运行阶段,所以能够在运行前发现类型错误。