跟着阮一峰老师写代码之Typescript的基本用法 教你学会如何去尝试typescript

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来运行。类型判断发生在编译阶段,不再运行阶段,所以能够在运行前发现类型错误。

相关推荐
GoppViper22 分钟前
uniapp中实现<text>文本内容点击可复制或拨打电话
前端·后端·前端框架·uni-app·前端开发
Sam902931 分钟前
【Webpack--007】处理其他资源--视频音频
前端·webpack·音视频
Code成立33 分钟前
HTML5精粹练习第1章博客
前端·html·博客·html5
架构师ZYL44 分钟前
node.js+Koa框架+MySQL实现注册登录
前端·javascript·数据库·mysql·node.js
gxhlh2 小时前
React Native防止重复点击
javascript·react native·react.js
一只小白菜~2 小时前
实现实时Web应用,使用AJAX轮询、WebSocket、还是SSE呢??
前端·javascript·websocket·sse·ajax轮询
晓翔仔2 小时前
CORS漏洞及其防御措施:保护Web应用免受攻击
前端·网络安全·渗透测试·cors·漏洞修复·应用安全
jingling5552 小时前
后端开发刷题 | 数字字符串转化成IP地址
java·开发语言·javascript·算法
GISer_Jing3 小时前
【前后端】大文件切片上传
前端·spring boot
csdn_aspnet3 小时前
npm 安装 与 切换 淘宝镜像
前端·npm·node.js