TypeScript入门实战笔记 -- 01 如何快速搭建 TypeScript 学习开发环境?

🍍IDE for TypeScript

在搭建 TypeScript 环境之前,我们需要先认识几款适合 TypeScript 的 IDE。只有这样,在开发时我们才能根据实际情况选择合适的 IDE 进行安装,从而提升工作效率。

VS Code

Visual Studio Code(VS Code),此款开源编辑器由微软开发并维护,深受开发者的欢迎。首推VS Code的原因,可以归结为以下四点:

  1. 在传统语法高亮、自动补全功能的基础上拓展了基于变量类型、函数定义,以及引入模块的智能补全;
  1. 支持在编辑器上直接运行和调试应用;
  1. 内置了 Git Comands,能大幅提升使用 Git 及其他 SCM 管理工具的协同开发效率;
  1. 基于 Electron 开发,具备超强的扩展性和定制性。

下面请你点击这里打开官方网站,并下载安装包进行安装。安装好后,我们点击启动图标即可启动 VS Code。

在 Mac 电脑上,如果你习惯使用命令行,可以将 VS Code bin 目录添加到环境变量 PATH 中,以便更方便地唤起它,如下代码所示:

export PATH="$PATH:/Applications/Visual Studio Code.app/Contents/Resources/app/bin"

然后,在 Mac 命令行工具中,我们使用 Vim 编辑“source ~/.bash_profile”即可让配置的环境变量生效。

source ~/.bash_profile

Vim 保存退出后,输入“code 应用路径”(如下所示),我们就可以快速打开和编辑指定路径下的应用了。

 code 应用路径

因为 VS Code 中内置了特定版本的 TypeScript 语言服务,所以它天然支持 TypeScript 语法解析和类型检测,且这个内置的服务与手动安装的 TypeScript 完全隔离。因此,VS Code 支持在内置和手动安装版本之间动态切换语言服务,从而实现对不同版本的 TypeScript 的支持

如果当前应用目录中安装了与内置服务不同版本的 TypeScript,我们就可以点击 VS Code 底部工具栏的版本号信息,从而实现 “use VS Code's Version” 和 “use Workspace's Version” 两者之间的随意切换。

设置当前窗口使用的 TypeScript 版本的具体操作,如下图所示:

我们也可以在当前应用目录下的 “.VS Code/settings.json” 内添加命令(如下所示)配置 VS Code 默认使用应用目录下安装的 TypeScript 版本,以便提供语法解析和类型检测服务。

{"typescript.tsdk": "node_modules/typescript/lib"
}

在实际编写 TypeScript 代码时,我们可以使用“Shift + Command + M”快捷键打开问题面板查看所有的类型错误信息概览,如下图所示:

查看所有的类型错误信息概览图

这里请注意:不同操作系统、不同 VS Code 版本的默认快捷键可能不一致,我们可以点击菜单栏中的“视图(View)| 问题(Problems)” 查看具体快捷键。

除了类型定义之外,TypeScript 语言服务还能将使用 JSDoc 语法编写的结构化注释信息提供给 VS Code,而这些信息将在对应的变量或者类型中通过 hover 展示出来,极大地提升了代码的可读性和开发效率,如下图所示:

对于 VS Code 这款 IDE 而言,它比较大众化、开放化,已经能满足我们绝大多数的功能诉求。即便有些需求不能满足,我们也可以通过丰富的插件市场进行实现。

WebStorm

另外一款值得推荐的 TypeScript 开发利器是 WebStorm,它具备开箱即用、无须做任何针对性的配置即可开发、执行和调试 TypeScript 源码这两大优势。

下面请点击这里打开官方网站,并下载安装包进行安装。

WebStorm 也是基于标准的 TypeScript Language Service 来支持 TypeScript 的各种特性,与其他 IDE 在类型检测结果、自动完成提示上没有任何差异。

比如,它同样可以准确地进行代码自动补全,如下图所示:

代码自动补全效果图

再比如,它同样支持 hover 提示类型及 JSDoc 注释,如下图所示:

提示类型及注释效果图

因为 WebStorm 毕竟是一款商业化(收钱的)软件,所以它还集成了很多强大的 TypeScript 开发功能,具体内容你可点击这里查看。

WebStorm 与 VS Code 相比,最大的优势在于开箱即用,这点可谓是选择困难症患者的福音。不过,它对电脑配置要求较高,对于 Mac 用户来说比较适合。

Playground

官方也提供了一个在线开发 TypeScript 的云环境——Playground。

基于它,我们无须在本地安装环境,只需要一个浏览器即可随时学习和编写 TypeScript,同时还可以方便地选择 TypeScript 版本、配置 tsconfig,并对 TypeScript 实时静态类型检测、转译输出 JavaScript 和在线执行。

而且在体验上,它也一点儿不逊色于任何本地的 IDE,对于刚刚学习 TypeScript 的我们来说,算是一个不错的选择。

  • 点击查看中文版地址(如下图所示)
  • 点击查看英文版地址

中文版的 TypeScript Playground 效果图

Playground 还为我们提供了分享的功能,比如我们可以把学习成果、遇到的难点通过 URL 的形式分享给他人。

不过,在实际开发业务应用中,我们还是极力推荐使用 VS Code,毕竟它是微软的“亲儿子”,与 TypeScript 集成得更好,拥有极其完善的插件体系,更重要的是还完全免费。

基于 VS Code安装 TypeScript

接下来,我们继续了解如何基于 VS Code 完善 TypeScript 开发、转译环境。

因为 VS Code 只集成了 TypeScript 语言服务,不包含转译器,所以我们还需要单独安装 TypeScript。

为了方便快速完成一个入门小示例,这里我们推荐通过命令行工具使用 npm 全局安装 TypeScript。

具体操作:使用“Ctrl + `”快捷键打开 VS Code 内置命令行工具,然后输入如下所示代码:

npm i -g typescript

注意:使用示例的开发环境都是基于 TypeScript 3.9.* 版本,所以在尝试操作时也安装相同的 TypeScript 版本(比如 3.9.2、3.9.3……3.9.7),如下代码所示:

npm i -g typescript@3.9.*

TypeScript 安装完成后,我们输入如下所示命令即可查看当前安装的 TypeScript 版本。

tsc -v

然后,我们可能会看到输出了我们安装的版本信息:

Version 3.9.10

我们也可以通过安装在 Terminal 命令行中直接支持运行 TypeScript 代码(Node.js 侧代码)的 ts-node 来获得较好的开发体验。

通过 npm 全局安装 ts-node 的操作如下代码所示:

npm i -g ts-node

如果你是 Mac 或者 Linux 用户,就极有可能在 npm i -g typescript 中遭遇 “EACCES: permission denied” 错误,此时我们可以通过以下 4 种办法进行解决:

  • 使用 nvm 重新安装 npm
  • 修改 npm 默认安装目录
  • 执行 sudo npm i -g xx
  • 执行 sudo chown -R [user]:[user] /usr/local/lib/node_modules

你可以点击这里了解更多相关建议。

最后,我们创建了一个 ts-example 的应用目录用来记录练习例子,然后使用 VS Code 即可打开这个应用。

编写 Hello World

我们可以在练习目录下输入“tsc --init”命令快速创建一个 tsconfig.json 文件,或者在 VS Code 应用窗口新建一个空的 tsconfg.json配置 TypeScript 的行为。

tsc --init

为了让 TypeScript 的行为更加严格、简单易懂,建议在 tsconfig.json 中开启如下所示设置,该设置将决定了 VS Code 语言服务如何对当前应用下的 TypeScript 代码进行类型检测。

"compilerOptions": {/* Strict Type-Checking Options */"strict": true,                           /* Enable all strict type-checking options. */"noImplicitAny": true,                    /* Raise error on expressions and declarations with an implied 'any' type. */"strictNullChecks": true,                 /* Enable strict null checks. */"strictFunctionTypes": true,              /* Enable strict checking of function types. */"strictBindCallApply": true,              /* Enable strict 'bind', 'call', and 'apply' methods on functions. */"strictPropertyInitialization": true,     /* Enable strict checking of property initialization in classes. */"noImplicitThis": true,                   /* Raise error on 'this' expressions with an implied 'any' type. */"alwaysStrict": false                     /* Parse in strict mode and emit "use strict" for each source file. */
}

然后,我们输入如下所示代码即可新建一个 HelloWorld.ts 文件:

function say(word: string) {console.log(word)
}say('hello word')

在以上代码中,word 函数参数后边多出来的 “: string” 注解直观地告诉我们,这个变量的类型就是 string。如果你之前使用过其他强类型的语言(比如 Java),就能快速理解 TypeScript 语法。

.ts 文件创建完成后,我们就可以使用 tsc(TypeScript Compiler) 命令将 .ts 文件转译为 .js 文件。

注意:指定转译的目标文件后,tsc 将忽略当前应用路径下的 tsconfig.json 配置,因此我们需要通过显式设定如下所示的参数,让 tsc 以严格模式检测并转译 TypeScript 代码。

tsc HelloWorld.ts --strict --alwaysStrict false

同时,我们可以给 tsc 设定一个 watch 参数监听文件内容变更,实时进行类型检测和代码转译,如下代码所示:

tsc HelloWorld.ts --strict --alwaysStrict false --watch

tsc 转译监听模式效果图

我们也可以直接使用 ts-node 运行 HelloWorld.ts,如下代码所示:

ts-node HelloWorld.ts

运行成功后,ts-node 就会输出如下所示内容:

hello word

当然,我们也可以唤起“直接运行”(本质上是先自动进行转译,再运行)TypeScript 的 ts-node 命令行来编写代码,这就跟我们在 Node.js 命令行或者浏览器中调试工具一样。

然后,我们再回车立即执行如下所示代码:

function say(word: string) {console.log(word)
}say()

这里请注意:TypeScript 的类型注解旨在约束函数或者变量,在上面的例子中,我们就是通过约束一个示例函数来接收一个字符串类型(string)的参数。

在接下来演示的例子中,我们将故意犯一个低级错误,先传递一个数字类型的参数给如下所示函数:

function say(word: string) {console.log(word)
}say(1)

然后 VS Code 会标红这个错误,并在问题(Problems)面板中显示错误信息,如下图所示:

VS Code 问题面板显示效果图

最后,通过 tsc 转译或者 ts-node 运行这个示例,我们会看到如下所示的报错信息。

'number''string'

error TS2345: Argument of type  is not assignable to parameter of type .

这是因为函数 say 限定了形参的类型是 string,而我们调用 say 时传递的实参类型是 number,所以转译阶段抛出了这个错误。

小结

VS Code 让我们获得一种较为理想的开发体验,不必等到转译阶段,在编码时就能快速检测、抛出类型错误,极大地提升了 TypeScript 开发体验和效率。

特别需要注意的是,VS Code 默认使用自身内置的 TypeScript 语言服务版本,而在应用构建过程中,构建工具使用的却是应用路径下 node_modules/typescript 里的 TypeScript 版本。如果两个版本之间存在不兼容的特性,就会造成开发阶段和构建阶段静态类型检测结论不一致的情况,因此,我们务必将 VS Code 语言服务配置成使用当前工作区的 TypeScript 版本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/213270.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

public static final

常量对象中声明并赋值的正确写法一&#xff1a; public class RoleConstant {public static final List<String> PROBLEM_VIEW_ALL_DATA new ArrayList<String>() {{add("角色1");add("角色2");add("角色3");}};}常量对象中声明并…

设计模式篇---代理模式

文章目录 概念结构实例静态代理动态代理 总结 概念 代理模式&#xff1a;给某一个对象提供一个代理或占位符&#xff0c;并由代理对象来控制对原对象的访问。 比如我们想从其他国家买东西&#xff0c;但我们无法直接联系外国的商家&#xff0c;可以找代理商&#xff0c;让他们…

dell r720远程网络安装ubuntu20.04(无U盘)

登陆后界面&#xff0c;在主界面上&#xff0c;我们就可以看到各个硬件组件的状态。在快速启动任务栏中&#xff0c;可以对系统电源进行操作&#xff0c;如开机、关机等。安装操作系统&#xff0c;在虚拟控制台预览处点击>启动 按照浏览器出现的提示确定安装控件等&#x…

NSSCTF web刷题记录7

文章目录 [SDCTF 2022]CURL Up and Read [SDCTF 2022]CURL Up and Read 考点&#xff1a;SSRF 打开题目发现是curl命令&#xff0c;提示填入url 尝试http://www.baidu.com&#xff0c;成功跳转 将url的字符串拿去解码&#xff0c;得到json格式数据 读取下环境变量&#xff0c…

基础宠物商店管理系统(Java)大一程序设计

一.开发环境 Windows 11 -- JDK 21 -- IDEA 2021.3.3 二.需求 三.代码部分 //创建一个宠物类&#xff0c;被另外两类继承public class Pet {private String name;private int age;private String gender;private double cost0;//买进价格private double sellprice0;//卖出价…

【Spring】Spring统一功能处理

Spring统一功能处理 拦截器拦截器什么是拦截器拦截器的基本使用定义拦截器注册配置拦截器 拦截器详解拦截器的拦截路径配置拦截器实现原理初始化处理请求 适配器模式 统一数据返回格式统一数据返回格式快速入门 统一异常处理 拦截器 场景: 我们要对一个网站实现强制登陆的功能…

ChibiOS简介2/5

ChibiOS简介2/5 1. 源由2. ChibiOS基础知识2/52.4 Chapter 4 - ChibiOS General Architecture2.4.1 The Big Picture&#xff08;总体框图&#xff09;2.4.2 Embedded Components&#xff08;嵌入式组件&#xff09;2.4.3 Application Model&#xff08;应用模型&#xff09;2.…

爬虫解析——Xpath的安装及使用(五)

目录 一、Xpath插件的安装 二、安装 lxml 三、Xpath解析文件 1.解析本地文件 &#xff08;1&#xff09;导入本地文件 &#xff08;2&#xff09;解析本地文件 2.服务器文件解析 &#xff08;1&#xff09;获取网页源码 &#xff08;2&#xff09;解析服务器响应文件 …

TailwindCSS 如何处理RTL布局模式

背景 TikTok作为目前全世界最受欢迎的APP&#xff0c;需要考虑兼容全世界各个地区的本地化语言和阅读习惯。其中对于阿拉伯语、波斯语等语言的阅读书写习惯是从右向左的&#xff0c;在前端有一个专有名字RTL模式&#xff0c;即Right-to-Left。 其中以阿拉伯语作为第一语言的人…

建立个人学习观|地铁上的自习室

作者&#xff1a;向知 如果大家有机会来北京&#xff0c;可以来看看工作日早上八九点钟&#xff0c;15 号线从那座叫“顺义”的城市通向“望京”的地铁&#xff0c;你在那上面&#xff0c;能看到明明白白的&#xff0c;人们奔向梦想的模样。 一、地铁上的自习室 我在来北京之前…

【算法集训】基础数据结构:三、链表

链表就是将所有数据都用一个链子串起来&#xff0c;其中链表也有多种形式&#xff0c;包含单向链表、双向链表等&#xff1b; 现在毕竟还是基础阶段&#xff0c;就先学习单链表吧&#xff1b; 链表用头结点head表示一整个链表&#xff0c;每个链表的节点包含当前节点的值val和下…

2024 年顶级的 Android 系统修复软件与方法

您是否正在寻找可以修复 PC 上 Android 操作系统的工具&#xff1f;这是我们精选的最好的 Android 系统修复软件&#xff01; Android 是世界著名的智能手机操作系统。全世界有数百万人使用这个操作系统&#xff0c;这使得它安全可靠。然而&#xff0c;这仍然不能使它完美无缺…

048:利用vue-video-player播放m3u8

第048个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使…

MyBatis进阶之分页和延迟加载

文章目录 分页1. RowBounds 分页2. PageHelper 分页3. PageInfo 对象属性描述 延迟加载立即加载激进式延迟加载真-延迟加载 分页 Mybatis 中实现分页功能有 3 种途径&#xff1a; RowBounds 分页&#xff08;不建议使用&#xff09;Example 分页&#xff08;简单情况可用)Pag…

关于对向量检索研究的一些学习资料整理

官方学习资料 主要是的学习资料是&#xff0c; 官方文档 和官方博客。相关文章还是挺多 挺不错的 他们更新也比较及时。有最新的东西 都会更新出来。es scdn官方博客 这里简单列一些&#xff0c;还有一些其他的&#xff0c;大家自己感兴趣去看。 什么是向量数据库 Elasticse…

文件加密软件哪个最好用 好用的文件加密软件推荐

一说到文件加密软件&#xff0c;可能大家都会去搜一些不知名的软件来&#xff0c;但是选择这种加密软件&#xff0c;最好还是要看一些资质的。 资质不好的&#xff0c;可能加密过后你自己也打不开文件&#xff0c;&#xff08;ps&#xff1a;我自己就遇到过这种情况&#xff09…

基于Java SSM框架高校校园点餐订餐系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架高校校园点餐订餐系统演示 摘要 21世纪的今天&#xff0c;随着社会的不断发展与进步&#xff0c;人们对于信息科学化的认识&#xff0c;已由低层次向高层次发展&#xff0c;由原来的感性认识向理性认识提高&#xff0c;管理工作的重要性已逐渐被人们所认识&a…

Oracle(2-14)User-Managed Incomplete Recovery

文章目录 一、基础知识1、Incomplete Recovery Overview 不完全恢复概述2、Situations Requiring IR 需要不完全恢复的情况3、Types of IR 不完全恢复的类型4、IR Guidelines 不完全恢复指南5、User-Managed Procedures 用户管理程序6、RECOVER Command Overview 恢复命令概述7…

Python数据科学视频讲解:Python注释

2.3 Python注释 视频为《Python数据科学应用从入门到精通》张甜 杨维忠 清华大学出版社一书的随书赠送视频讲解2.3节内容。本书已正式出版上市&#xff0c;当当、京东、淘宝等平台热销中&#xff0c;搜索书名即可。内容涵盖数据科学应用的全流程&#xff0c;包括数据科学应用和…

20231210原始编译NanoPC-T4(RK3399)开发板的Android10的SDK

20231210原始编译NanoPC-T4(RK3399)开发板的Android10的SDK 2023/12/10 17:27 rootrootrootroot-X99-Turbo:~$ rootrootrootroot-X99-Turbo:~$ mkdir nanopc-t4 rootrootrootroot-X99-Turbo:~$ rootrootrootroot-X99-Turbo:~$ rootrootrootroot-X99-Turbo:~$ cd nanopc-t4/ …