From 8f96698853f4ea31c4db97acdfbce39fcd163a9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BB=93=E5=8F=91=E5=8F=97=E9=95=BF=E7=94=9F?= Date: Sun, 23 Jun 2019 23:43:26 +0800 Subject: [PATCH] =?UTF-8?q?typescript=E5=88=9D=E8=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/_posts/前端杂烩/TypeScript初见.md | 80 ++++++++++++++++++++++ source/images/前端杂烩/typescript安装.png | Bin 0 -> 25381 bytes 2 files changed, 80 insertions(+) create mode 100644 source/_posts/前端杂烩/TypeScript初见.md create mode 100644 source/images/前端杂烩/typescript安装.png diff --git a/source/_posts/前端杂烩/TypeScript初见.md b/source/_posts/前端杂烩/TypeScript初见.md new file mode 100644 index 0000000..35c9b0f --- /dev/null +++ b/source/_posts/前端杂烩/TypeScript初见.md @@ -0,0 +1,80 @@ +--- +title: TypeScript初见 +date: 2019-6-23 15:22:13 +tags: + - TypeScript +categories: + - 前端杂烩 +--- + +`TypeScript` ( 以下简称TS ) 由微软开发, 是一个JavaScript的超集, 遵循ES6规范 +也就是TS本身支持所有的JS语法, 已有的JS程序不需要任何改动就可以在TS环境下运行 +同时进行了扩展 +添加了基于类的面向对象编程特性, 以及数据类型 + + +> 这种数据类型的定义, 与Java这种编译型语言终究不同 +我的体会是它只存在编译期的类型检查, 而运行期还是与JS基本相同 +这样的好处也很明显, 能够减少在开发阶段犯错误的几率 ( 毕竟IDE可以完成类型检查的错误提示 ) +避免一些类型问题都需要调试来排查 + +### 开发环境 +首先这种JavaScript的超集, 如果需要在浏览器运行 +必然是需要compiler的, 因为需要转成可执行的JavaScript代码 + +如果是在nodejs里面运行, 就可以不需要了, 因为它可以想babel那样, 封装一个自己的运行器出来 +比如babel的 `babel-node`, 就如同是nodejs的 `node`, 前者提供了提供一个支持ES6的REPL环境 + +```shell +npm install -g typescript +``` +> 当然如果是只在项目里面使用, 也可以不执行全局安装 + +![typescript安装](/images/前端杂烩/typescript安装.png) +可以看到安装后添加了两个命令行工具, 分别是`tsc`和`tsserver` +tsc就是 TypeScript Compiler + +#### 使用编译器 +现在可以尝试写个typescript文件 +比如 +```typescript +// hello.ts +export class Hello { + hello(msg) { + console.log(msg) + } +} +``` +然后执行`tsc hello.ts` +就会生成hello.js文件, 内容如下 +```javascript +"use strict"; +exports.__esModule = true; +var Hello = /** @class */ (function () { + function Hello() { + } + Hello.prototype.hello = function (msg) { + console.log(msg); + }; + return Hello; +}()); +exports.Hello = Hello; +``` +就是一个语法的转换过程 + + + + + + + + + + +### 写在最后 +最近拿 [Nestjs](https://docs.nestjs.cn/) 给自己的博客写了个管理端的后台 +当然前后端分离是必须的, Nestjs写后台也只写接口 +这个框架需要用TypeScript编写代码, 于是就顺带学了学 + +据说习惯了TypeScript就再也不想写JavaScript了, 我倒是没怎么觉得 +只是Nestjs的很多设计都和Spring有几分神似, 只能说Spring大法好, 上手倒是容易很多 \ No newline at end of file diff --git a/source/images/前端杂烩/typescript安装.png b/source/images/前端杂烩/typescript安装.png new file mode 100644 index 0000000000000000000000000000000000000000..1953a18b364e40aee3f2a9bcccc29e148f199bee GIT binary patch literal 25381 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