目录
在写api接口的时候,觉得没有提示很不爽,想用typescript把js'文件全部重写一遍
我默认你使用vscode开发
1.在vscode中安装typescript
npm i typescript -g
-g的意思是全局安装,这样就不用每次写ts文件都要安装了
如果控制台报错npm不可用,请安装node再使用
检查ts的版本信息以确保安装正确
tsc --version
出现和我这样的版本信息就代表可以正确使用ts了!
由于*.ts文件最终的运行需要依靠js。所以必须先将ts编译成js才能运行。
我给出示例 如上
2.typescript编译成JavaScript
但细心的朋友可能发现了,10年的javascript代码跟现在的js代码是不一样的。
以前javascript没有class的语法。只能采用原型链条。为了方便理解,加深印象,我给出例子。
这是采用类的写法
class Father {
move = () => console.log('我在走路');
constructor(age, assets) {
this.age = age;
this.assets = assets;
}
}
class Son extends Father {
constructor(age, assets) {
this.name = '张三'
this.wife = '右手'
super(age, assets);
}
}
而另一种方法 则需要这么多代码,使用原型链的方法实现。
function Father(age, assets) {
Father.prototype.move = function () {
console.log('我在走路')
}
Object.defineProperty(Father.prototype.__proto__, 'age', {
value: age,
writable: true,
})
Object.defineProperty(Father.prototype.__proto__, 'assets', {
value: assets,
writable: true
})
}
function Son(age, assets) {
Son.prototype.name = "张三"
Son.prototype.wife = '右手'
Son.prototype.__proto__.__proto__ = new Father(age, assets).__proto__.__proto__
}
那么… typescript怎么知道我想要什么样子的代码呢?我到底是要原型链还是要class。到底是要require还是要import。typescript不知道,但是 它知道。
它是谁?他就是 tsconfig.json
3.tsconfig.json 的配置
- 在根目录下新建 tsconfig.json 文件
- 配置相关信息
{
"compilerOptions": {
"target": "es5", // 指定 ECMAScript 版本
"module":"CommonJS", // 当前编写的module类型。
"outDir": "./dist",
"rootDir": "./src",
"lib": [
"dom",
"dom.iterable",
"esnext"
], // 要包含在编译中的依赖库文件列表
"allowJs": true, // 允许编译 JavaScript 文件
"skipLibCheck": true, // 跳过所有声明文件的类型检查
"esModuleInterop": true, // 禁用命名空间引用 (import * as fs from "fs") 启用 CJS/AMD/UMD 风格引用 (import fs from "fs")
"allowSyntheticDefaultImports": true, // 允许从没有默认导出的模块进行默认导入
"strict": true, // 启用所有严格类型检查选项
"forceConsistentCasingInFileNames": true, // 不允许对同一个文件使用不一致格式的引用
"module": "esnext", // 指定模块代码生成
"moduleResolution": "node", // 使用 Node.js 风格解析模块
"resolveJsonModule": true, // 允许使用 .json 扩展名导入的模块
"noEmit": true, // 不输出(意思是不编译代码,只执行类型检查
"jsx": "react", // 在.tsx文件中支持JSX
"sourceMap": true, // 生成相应的.map文件
"declaration": true, // 生成相应的.d.ts文件
"noUnusedLocals": false, // 报告未使用的本地变量的错误
"noUnusedParameters": false, // 报告未使用参数的错误
"experimentalDecorators": true, // 启用对ES装饰器的实验性支持
"incremental": true, // 通过从以前的编译中读取/写入信息到磁盘上的文件来启用增量编译
"noFallthroughCasesInSwitch": true
},
"include": [
"src/**/*" // *** TypeScript文件应该进行类型检查 ***
],
"exclude": ["node_modules", "build"] // *** 不进行类型检查的文件 ***
}
你大可以直接复制进去。需要注意的是
- "outDir": "./dist":表示typescript编译输出后的路径
- "rootDir": "./src",:表示typescript需要编译的路径
比如这就是我的实例。写在src下的ts文件使用tsc命令之后编译到dist目录下。随后就可以通过nodemon、或者PM2进行运行
typescript写接口是爽了。但是每次都要编译。比如我就是每次写完数据库接口都要编译一次。所以接下来你们猜到了吧。我要提出一种实时编译的功能。
看到这里请点个赞吧亲看到这里请点个赞吧亲看到这里请点个赞吧亲看到这里请点个赞吧亲
4.vscode对typescript的检测功能
ts文件的强类型给我们提供了便利的同时,也带来了一些弊端。你是否记得你使用js的初衷。能过够实时刷新代码而沾沾自喜。而ts却违背了这个原则,每次需要编译成js文件才能运行。这岂不是比java文件还麻烦?
好在这个宇宙之第一编辑器能解决一切问题
vscode强大的任务检测功能可以检测ts文件的变化并自定义任务。前提是有json配置文件。
很好。tsconfig.json我们已经配置了。
选择监视ts文件就能文件更改后自动编译 是不是很神奇
只要每次保存,vscode就屁颠屁颠的去编译了
5.nodemon的使用
nodemon是一种工具,可在检测到目录中的文件更改时通过自动重新启动 node 应用程序来帮助开发基于 node.js 的应用程序
但其实这不是唯一的方法,不过在测试阶段,nodemon是最佳的选择
- 前面已经实现了ts文件实时编译。要是js文件能够实时解释运行,那岂不是更好?
- 虽然我们可以使用html中写js代码然后在浏览器实时运行,但是这毕竟不是写的原生的js代码。你要是手动复制代码进html文件。未免有点难受
- 我们可以使用 node *.js命令运行js程序。但是这个效率不高。
- nodemon插件的出现 解决了你的问题。检测运行的js文件变化。每次js代码变化就会重新运行。
- nodemon的弊端也有,如果出现了线程阻塞就会产生意想不到的后果,不过对于开发环境下是绰绰有余了。
npm i -g nodemon //安装nodemon插件
走到这里,我们就已经实现了实时编译ts文件啦