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 */
    "target": "esnext", /* 指定编译之后的版本目标: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
    "module": "esnext", /* 指定要使用的模块标准: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
    "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 版本。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Win11专业版,eNSP启动失败,错误代码40 解决方法

微软Win11系统默认开启的 Virtualization-based Security (VBS)“基于虚拟化的安全性”会导致游戏、跑分性能下降。VBS 基于虚拟化的安全性,通常称为内核隔离。使用硬件虚拟化在内存中创建安全区域,为其他安全功能提供了一个安全平…

parser

"typescript-eslint/parser": "5.56.0", "vue-eslint-parser": "9.1.0", 代码来自ruoyi-plus vue-eslint-parser是一个专门用于解析Vue.js单文件组件(.vue文件)的ESLint插件。ESLint是一个用于检查和修复Java…

Python接口自动化浅析requests请求封装原理

以下主要介绍如何封装请求 还记得我们之前写的get请求、post请求么? 大家应该有体会,每个请求类型都写成单独的函数,代码复用性不强。 接下来将请求类型都封装起来,自动化用例都可以用这个封装的请求类进行请求 将常用的get、p…

[ESXi 5/6/7/8]设置 ESXi DCUI 欢迎消息

目录 1. ESXi默认设置2. 设置欢迎消息 MOTD2.1 使用GUI设置2.2 使用 ESXCLI 命令设置使用 esxcli 移除欢迎消息 参考资料 配置在 ESXi 直接控制台用户界面 (DCUI) 中显示的欢迎消息,并验证配置是否处于只读模式 Annotations.WelcomeMessage 是ESXi的高级系统设置&am…

Unity中的ShaderToy

文章目录 前言一、ShaderToy网站二、ShaderToy基本框架1、我们可以在ShaderToy网站中,这样看用到的GLSL文档2、void mainImage 是我们的程序入口,类似于片断着色器3、fragColor作为输出变量,为屏幕每一像素的颜色,alpha一般赋值为…

CSS Grid布局入门:从零开始创建一个网格系统

CSS Grid布局入门:从零开始创建一个网格系统 引言 在响应式设计日益重要的今天,CSS Grid布局系统是前端开发中的一次革新。它使得创建复杂、灵活的布局变得简单而直观。本教程将通过分步骤的方式,让你从零开始掌握CSS Grid,并在…

【NLP】RAG 应用中的调优策略

​ 检索增强生成应用程序的调优策略 没有一种放之四海而皆准的算法能够最好地解决所有问题。 本文通过数据科学家的视角审视检索增强生成(RAG)管道。它讨论了您可以尝试提高 RAG 管道性能的潜在“超参数”。与深度学习中的实验类似,例如&am…

MyBatisPlus简介

1 简介 MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 2、特性 无侵入 只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑…

Java+Swing: 从数据库中查询数据并显示在表格中 整理11

分析:要想从数据库中查询数据并分页展示到表格中,我觉得应该按照这个思路:首先就是发起请求,此时需要向数据库中传递三个参数:当前页码(pageNum)、每一页的数量(pageSize&#xff09…

无代码开发让合利宝支付与CRM无缝API集成,提升电商用户运营效率

合利宝支付API的高效集成 在当今快速发展的电子商务领域,电商平台正寻求通过高效的支付系统集成来提升用户体验和业务处理效率。合利宝支付,作为中国领先的支付解决方案提供者,为电商平台提供了一个高效的API连接方案。这种方案允许无代码开…

项目计划书

项目开发计划包括项目描述、项目组织、成本预算、人力资源估算、设备资源计划、沟通计划、采购计划、风险计划、项目过程定义及项目的进度安排和里程碑、质量计划、数据管理计划、度量和分析计划、监控计划和培训计划等。 软件全套资料获取:点我获取

炫酷CSS加载动画

HTML结构 首先是HTML代码&#xff0c;定义了一个类名container的<div>容器&#xff1a; 1.在这个容器里面包含了一些加载器.loader&#xff0c;每个加载器都具有不同的旋转角度自定义属性--r(1~4)&#xff0c;而每个加载器里面有20个<span>元素&#xff0c;并且也都…

vue编辑页面提示 this file does not belong to the project

背景 打开vue项目工程 文件夹被锁定&#xff08;有黄色背景&#xff09;&#xff0c;编辑页面时&#xff0c;报错。 报错提示&#xff1a; vue编辑页面提示 this file does not belong to the project 原因 一不下心打开了错误的文件包 解决方案 1、删除.idea文件夹 2、…

光学仿真 | 推动高精度且微型化摄像头以满足市场需求

光学设计人员面临着一项持续挑战&#xff0c;即满足消费者对摄像头等体积更小、更轻量化设备的需求&#xff0c;同时要不断提高图像质量。一般来说&#xff0c;能否获得最佳质量取决于镜头数量&#xff1a;可装入设备的镜头越多&#xff0c;分辨率和色彩精度就越高。 就智能手机…

隐语开源|周爱辉:隐语 TEE 技术解读与跨域管控实践

“隐语”是开源的可信隐私计算框架&#xff0c;内置 MPC、TEE、同态等多种密态计算虚拟设备供灵活选择&#xff0c;提供丰富的联邦学习算法和差分隐私机制 开源项目 github.com/secretflow gitee.com/secretflow 11月25日&#xff0c;「隐语开源社区 Meetup西安站」顺利举办&…

Pinia无废话,快速上手

Pinia无废话&#xff0c;快速上手 Vue3 状态管理 - Pinia 1. 什么是Pinia Pinia 是 Vue 的专属的最新状态管理库 &#xff0c;是 Vuex 状态管理工具的替代品 2. 手动添加Pinia到Vue项目 后面在实际开发项目的时候&#xff0c;Pinia可以在项目创建时自动添加&#xff0c;现…

项目播报 | 河北信投数字科技签约璞华科技,以数字化方式全面提升采购效率

近日&#xff0c;璞华科技签约河北信投数字科技有限责任公司&#xff08;以下简称“河北信投数字科技”&#xff09;。璞华科技基于璞华采云链产品帮助客户打造采购数字化全景解决方案&#xff0c;实现智慧采购数字化转型升级。 本次强强联合&#xff0c;双方就采购数字化平台建…

【产品设计】软件系统三基座之三:用户管理

软件系统中的用户管理该如何做&#xff1f;系统设计过程中要考虑哪几方面&#xff1f;用户体验设计从哪些点来考察&#xff1f; 软件系统三基座包含&#xff1a;权限管理、组织架构、用户管理。基于权限控制、组织搭建&#xff0c;用户可以批量入场。 一、用户管理 在系统构建…

深入理解RBAC权限系统

最近&#xff0c;一位朋友在面试中被问及如何设计一个权限系统。我们注意到目前许多后台管理系统&#xff08;包括一些热门的如若依快速开发平台&#xff09;都采用了RBAC访问控制策略。该策略通过将权限授予角色&#xff0c;然后将角色分配给用户&#xff0c;从而实现对系统资…

【Spark精讲】Spark任务运行流程

Spark任务执行流程 部署模式是根据Drvier和Executor的运行位置的不同划分的。client模式提交任务与Driver进程在同一个节点上&#xff0c;而cluster模式提交任务与Driver进程不在同一个节点。 Client模式 Clinet模式是在spark-submit提交任务的节点上运行Driver进程。 执行流…