如果有javascript基础,学习TypeScript其实并不难,写这篇文章的目的是记录一下学习ts的过程。因为老是学了之后,就容易忘,好记性不如烂笔头…
ts的学习的必要性:新技术的出现都是为了解决原有技术的某个痛点,js很好,这是不可否认的,但它依然有它的不足。
并且随着近几年前端领域的快速发展,让JavaScript迅速被普及和受广大开发者的喜爱,借助于JavaScript本身的强大,也让使用JavaScript开发的人员越来越多。
优秀的JavaScript没有缺点吗?
其实上由于各种历史因素,JavaScript语言本身存在很多的缺点;
JavaScript正在慢慢变好
首先你需要知道,编程开发中我们有一个共识:错误出现的越早越好
现在我们想探究的就是如何在 代码编译期间 发现代码的错误:
JavaScript可以做到吗?不可以,我们来看下面这段经常可能出现的代码问题。
这是我们一个非常常见的错误:
当然,你可能会想:我怎么可能犯这样低级的错误呢?
但是,如果我们可以给JavaScript加上很多限制,在开发中就可以很好的避免这样的问题了:
我们已经简单体会到没有类型检查带来的一些问题,JavaScript因为从设计之初就没有考虑类型的约束问题,所以造成了前端开发人员关于类型思维的缺失:
所以我们经常会说JavaScript不适合开发大型项目,因为当项目一旦庞大起来,这种宽松的类型约束会带来非常多的安全隐患,多人员开发它们之间也没有良好的类型契约。
为了弥补JavaScript类型约束上的缺陷,增加类型约束,很多公司推出了自己的方案:
而现在,无疑TypeScript已经完全胜出:
虽然我们已经知道TypeScript是干什么的了,也知道它解决了什么样的问题,但是我们还是需要全面的来认识一下TypeScript到底是什么?
我们来看一下TypeScript在GitHub和官方上对自己的定义:
怎么理解上面的话呢?
官方对TypeScript有几段特点的描述,我觉得非常到位(虽然有些官方,了解一下),我们一起来分享一下:
众多项目采用TypeScript
正是因为有这些特性,TypeScript目前已经在很多地方被应用:
大前端是一群最能或者说最需要折腾的开发者:
但是每一样技术的出现都会让人惊喜,因为他必然是解决了之前技术的某一个痛点的,而TypeScript真是解决了JavaScript存在的很多设计缺陷,尤其是关于类型检测的。
并且从开发者长远的角度来看,学习TypeScript有助于我们前端程序员培养 类型思维,这种思维方式对于完成大型项目尤为重要。
在前面我们提到过,TypeScript最终会被编译成JavaScript来运行,所以我们需要搭建对应的环境:
我们需要在电脑上安装TypeScript,这样就可以通过TypeScript的Compiler将其编译成JavaScript;
所以,我们需要先可以先进行全局的安装:
# 安装命令
npm install typescript -g
#查看版本
tsc --version
如果我们每次为了查看TypeScript代码的运行效果,都通过经过两个步骤的话就太繁琐了:
是否可以简化这样的步骤呢?
上面我提到的两种方式,可以通过两个解决方案来完成:
先装包
npm install webpack webpack-cli webpack-dev-server typescript ts-loader html-webpack-plugin -D
这里面有个坑,就是webpakc-dev-server已经更新到4.x的版本了,如果你的Node.js版本比较低会导致报错,建议更新最新的Node.js版本
如果不想安装最新Node.js版本,建议使用下面写好的package.json文件,直接npm i安装依赖即可。
{
"name": "03_webpack_ts",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"build": "webpack",
"serve": "webpack serve"
},
"author": "",
"license": "ISC",
"devDependencies": {
"html-webpack-plugin": "^5.3.2",
"ts-loader": "^9.2.3",
"typescript": "^4.3.5",
"webpack": "^5.44.0",
"webpack-cli": "^4.7.2",
"webpack-dev-server": "^3.11.2"
}
}
在项目根目录创建src目录和index.html还有webpack.config.js配置文件,然后将下面代码覆盖到webpack.config.js中。
index.html
Document
webpack.config.js
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
mode: "development",
entry: "./src/main.ts",
output: {
path: path.resolve(__dirname, "./dist"),
filename: "bundle.js"
},
devServer: {
},
resolve: {
extensions: [".ts", ".js", ".cjs", ".json"]
},
module: {
rules: [
{
test: /\.ts$/,
loader: 'ts-loader'
}
]
},
plugins: [
new HtmlWebpackPlugin({
template: "./index.html"
})
]
}
在src目录中创建main.ts文件,写点 TS 代码。
main.ts
interface IPerson {
name: string
age: number
}
class Person implements IPerson {
name: string
age: number
constructor(name: string, age: number) {
this.name = name
this.age = age
}
getUserInfo() {
return `[*] my name is: ${this.name}, i am ${this.age} years old.`
}
}
const p1 = new Person('浮游', 18)
console.log(p1)
console.log(p1.getUserInfo())
此时如果直接npm run serve会报错的,因为还缺少tsconfig.json配置文件,这里直接通过tsc --init创建,然后npm run serve运行就能跑起来了。
安装ts-node
npm install ts-node -g
另外ts-node需要依赖 tslib 和 @types/node 两个包:npm install tslib @types/node -g
现在,我们可以直接通过 ts-node 来运行TypeScript的代码:ts-node math.ts