JavaScript类型缺失
在前端工程师最要接触的编程语言就是 JavaScript 了。因为前端领域的迅速发展,让 JavaScript 变得更加强大。它在也不是只能跑在浏览器上的语言。
著名的Atwood定律:Stack Overflow的创立者之一的 Jeff Atwood 在2007年提出了著名的 Atwood定律。
- any application that can be written in JavaScript, will eventually be written in JavaScript.
- 任何可以使用JavaScript来实现的应用都最终都会使用JavaScript实现。
Atwood定律也在被印证。现在 JavaScript 能干的事情就多了。
- Web端的开发一直使用的编程语言就是 JavaScript
- 桌面端开发我们可以借助于 Electron 进行开发。像程序员日常使用的代码编辑器 Microsoft VS Code、听歌的 国外Spotify,国内网易云音乐等都是借助于 Electron 这门技术开发的。
- 移动端:自 2014 年乔布斯发布了它的 iPhone 4 ,代表着移动端时代到来。前端也有着开发移动端的跨端技术。如 React Native、Taro等
- 小程序:国内很多餐饮品牌为了方便用户点单。都有了自己的微信小程序、支付宝小程序等。小程序开发也是使用的 JavaScript 进行开发。
- 服务端:开发者可以借助于 Node.js 进行服务端的开发。像 Uber 、 Netflix 等公司都在借助于 Node.js 开发自己的后端。
然而 JavaScript 有很多优点,相对应的它也有许多缺点。这其中类型的缺乏就是它的缺点之一。这也意味着变量的类型是在运行时,而不是在编译是。这就带来了以下几个问题。
- 类型不安全:由于没有类型检查,开发者很容易犯错误。如将字符串赋值给一个数字的变量。这也意味着开发者,只能在编译时才能发现这个错误。错误最好要在编写时就发现。
- 可读性和维护性差:由于类型的不明确,加上一个项目不仅仅是由一名前端工程师开发。每个人写的代码,如果没有类型的注解很难明白别人写的代码究竟是用来干什么的。
- …..
为了解决这个问题。Microsoft 在 2012年 推出了 TypeScript 这门语言。它是 JavaScript 的超集。增加了静态类型检查功能。
TypeScript 编译环境
我们需要全局安装 TypeScript ,这样才能编写 TypeScript 代码。
// 安装命令
npm install typescript -g
// 查看当前版本
tsc –version
安装完后,要想将书写的 TypeScript 运行在浏览器上,有两种方式:
- Webpack 环境
- ts-node
// 安装 ts-node
npm install ts-node -g
// 运行
ts-node math.ts
TypeScript 类型定义
变量声明
var /let / const 标识符: 数据类型 = 赋值;
代码
1 | let name: string = '世界,你好'; |
定义完变量类型后,后续赋值别的类型的值。TypeScript 就会报错。
除 String 类型外,还有
- Number(包括小数、浮点数、整数等)
- boolean
- undefined
- null
- … 如ES6以后新增的Symbol
数组
1 | const names: string[] = ['lizhien','liuyifei','chenduling']// 数组里的值只能是 String |
对象
1 | const names:{name:string,age:number} = {name:'zhien',age:18} |
函数参数和返回值类型
1 | function sum(num1: number,num2: number) : number { |
匿名函数的参数类型
一般我们不需要给匿名函数进行类型注解。TypeScript 会根据类型推导,推导出函数参数类型和返回值类型。
可选类型
1 | function coordinate(point:{x: number, y:number, z?:number}) { |
TypeScript 类型 - any类型
某些情况下我们不能确定一个变量的类型,并且它可能发生变化。这是候我们就可以使用 any 类型。
- 我们可以对 any 类型的变量进行任何操作。包括不存在的方法、属性。
- 我们可以对 any 类型的变量赋任意类型的值,如数字、对象、数组等。
1 | let a: any = 'why', |
TypeScript 类型 - unknown 类型
unknown 是 TypeScript 中特殊的一种类型,它用于描述类型不确定的变量。
- 和 any 类型类似。但对它做事情都是不合法的。如
1 | let result: unknown |
- 和 any 类型最大区别是在没有类型缩小时,不能对它做任何事情。
- any 类型存在最大的缺陷就是,可以任意调用属性和方法。
TypeScript - void类型
void通常来指定一个函数是没有返回值,那么它的返回值就是 void 类型
1 | function sum(num1: number, num2: number) { |
- 可以返回 undefined 给void类型,但不允许返回其他类型。
TypeScript- never类型
该类型适合开发工具库或开发框架,日常业务是接触不到或很少的时候才使用该类型。具体可以上网搜索该类型。
TypeScript- tuple类型
tuple是元组类型。它和数组类型很想,下面是和数组类型的区别
- 首先,数组类型通常建议存储相同类型的元素,不同类型的元素则不推荐存储。
- 其次,元组每个元素都有自己特性的类型,根据索引值可以获得对应的值
1 | const info:[name:string,age:number,color:string] = ['zhien',18,'purple'] |
变量的类型推导(推断)
开发中我们不可能所有变量都添加上类型注解。所以 TypeScript 会根据第一次赋值来推断出变量是什么类型。
1 | let name = '李知恩' // string |
总结
TypeScript 是 JavaScript 的超集,解决了 JavaScript 类型缺失的问题。通过类型定义、类型注解、类型推导等特性,提高了代码的可读性、可维护性和安全性。在实际开发中,我们可以灵活运用 TypeScript 的各种类型,使代码更加健壮和可靠。