【Node.js】从 JavaScript 迁移到 TypeScript:一步步指南

从 JavaScript 迁移到 TypeScript:一步步指南
作者:Alex Martinez
来源:https://lyricalstring.medium.com/migrating-from-javascript-to-typescript-a-step-by-step-guide-d45674b255c7


文章目录

      • 从 JavaScript 迁移到 TypeScript:一步步指南
        • 第 1 步:安装 TypeScript
        • 第 2 步:初始化 TypeScript 配置
        • 第 3 步:将 JavaScript 文件重命名为 TypeScript
        • 第 4 步:添加类型注解
        • 第 5 步:重构动态代码
        • 第 6 步:修复类型错误
        • 第 7 步:逐步启用严格模式
        • 第 8 步:庆祝 🎉

从 JavaScript 迁移到 TypeScript:一步步指南

引言

TypeScript,一个静态类型的 JavaScript 超集,在开发者社区中因其带来的代码健壮性而获得了大量关注。但如果你有一个现有的 JavaScript 项目,你想要转换为 TypeScript 呢?这看起来可能是一个令人生畏的任务,但别担心。本文将提供一个逐步指南,告诉你如何从 JavaScript 迁移到 TypeScript,而不会破坏你现有的代码库。

第 1 步:安装 TypeScript

首先,你需要在机器上全局安装 TypeScript。打开终端并运行:

npm install -g typescript

这将全局可用 TypeScript 编译器(tsc)命令。

第 2 步:初始化 TypeScript 配置

每个 TypeScript 项目都需要一个 tsconfig.json 文件,它指定了编译项目所需的根文件和编译器选项。

通过运行以下命令,在项目的根目录初始化一个 tsconfig.json 文件:

tsc --init

这将生成一个带有默认值的 tsconfig.json 文件。你可能需要根据项目需求调整其中的一些设置。例如,如果你正在使用 React,你需要设置 "jsx": "react"

第 3 步:将 JavaScript 文件重命名为 TypeScript

TypeScript 编译器只编译 TypeScript 文件(.ts 和 .tsx)。因此,我们需要将 JavaScript 文件重命名为 TypeScript。

对于没有 JSX 的文件:

mv myfile.js myfile.ts

对于有 JSX 的文件:

mv myfile.js myfile.tsx

注意:此时,你的 TypeScript 文件可能包含在代码是 JavaScript 时不明显的类型错误。不要惊慌;我们将在后续步骤中解决它们。

第 4 步:添加类型注解

现在,让我们开始为我们的变量、函数参数和函数返回值添加类型注解。这将帮助 TypeScript 理解我们的代码并捕获潜在的类型错误。

这是一个例子:

function greet(name: string): string {return `Hello, ${name}`;
}

在这里,name 是字符串类型,greet 函数返回一个字符串。

第 5 步:重构动态代码

迁移到 TypeScript 的一个挑战是处理代码中非常动态的部分。TypeScript 的严格类型可能是这种情况下的障碍。你可能需要重构一些代码,使其更友好于类型,或者使用 TypeScript 的逃生舱口(any, 类型断言)作为最后的手段。

第 6 步:修复类型错误

到目前为止,在终端中运行 tsc 可能会给你一个类型错误的列表。这些是 TypeScript 识别到由于类型不匹配而导致潜在 bug 的代码位置。你现在的工作是逐个解决这些错误。这个过程可能是耗时的,但它是值得的。每修复一个错误,你的代码就会变得更加健壮。

第 7 步:逐步启用严格模式

TypeScript 的严格模式是一个编译器选项,它在你的代码中启用了广泛的类型检查。这对于新项目是推荐的,但对于现有项目,打开严格模式可能会导致大量类型错误。

相反,你可以逐步启用更严格的选项。从 "noImplicitAny": true 开始,然后过渡到 "strictNullChecks": true,最后是 "strict": true

第 8 步:庆祝 🎉

祝贺你!你已经将你的 JavaScript 项目迁移到 TypeScript。庆祝你的成功,然后通过使用更具体的类型、完善 any 类型和利用 TypeScript 的高级特性来继续完善你对 TypeScript 的使用。

结论

从 JavaScript 迁移到 TypeScript 是朝着编写更可靠、可维护软件的重要一步。虽然这可能是一个具有挑战性的过程,但在防止 bug、改善开发者体验和更好工具方面的收益绝对是值得的。快乐的 TypeScript 编程!

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

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

相关文章

springboot+mp自动生成没有实体类

mybatisX版本冲突问题 一开始我的MyBatisX版本是1.6.1-3,使用mybatis-plus一直不能正常生成实体类 将MyBatisX的版本换成了1.5.7就可以了 MyBatisX版本更换 1.将原有的MyBatisX卸载后重新安装一个新的版本 2.选择一个合适的版本,这里我选的是1.5.7 下载完成后自己选择一个…

两次DNAT(端口映射)的问题验证

1.问题描述 某Linux课程上看到,两次DNAT(端口映射)会导致TCP源丢失的问题,因为本身学过网络相关的知识,理论上并未发现会在哪个节点丢失源的问题,遂实验验证。 2.ensp模拟验证 因为使用手头没有eve模拟器…

Apache POI入门学习

Apache POI入门学习 官网地址 excel中使用到的类读取excel表格内容表格内容maven依赖方式一测试结果 方式二测试结果 向excel中写入数据方式一方式二方式三测试结果 从 Excel 工作表中的公式单元格读取数据测试结果 Excel 工作表中写入公式单元格从受密码保护的Excel中读取数据…

【linux】dd命令

目录 命令简介 命令格式 使用场景 注意事项 命令简介 1,用来复制和转换文件的命令行工具 2,dd命令可以以指定的块大小从输入文件读取数据,再根据要求以相同或不同的块大小将数据写入输出文件。 命令格式 dd ifinput-file ofoutput-file …

远程代码/命令执行(RCE)

远程代码执行/远程命令执行(remote/code/execute||remote/command/execute) 类似sql注入xss等漏洞,rce也是代码注入(用户可控),注入对象为操作系统命令、后端代码,用户参 数可控,且未…

Python Web框架Django项目开发实战:创建在线学习应用

注意:本文的下载教程,与以下文章的思路有相同点,也有不同点,最终目标只是让读者从多维度去熟练掌握本知识点。 下载教程:Python项目开发Django实战-创建在线学习应用-编程案例解析实例详解课程教程.pdf 在当今数字化教育飞速发展的时代,构建一个在线学习平台成为许多教育…

autoware.auto 安装 ROS2

先进行docker安装 sudo apt-get update sudo apt-get install ca-certificates curl gnupg lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [archamd64] https://download.docker.com/linux/u…

python基础---函数以及常用变量

函数及变量 函数 使用def关键字 在参数名前面的*表示args是一个可变参数 def add(*args):total 0for val in args:total valreturn total# 在调用add函数时可以传入0个或多个参数 print(add()) print(add(1)) print(add(1, 2)) print(add(1, 2, 3)) print(add(1, 3, 5, 7…

一份简历的制作

个人简历是求职者面试前最需要准备的一项工具。一份好的简历可以帮助求职者获得更多的面试机会,并且为面试时的表现奠定基础。以下介绍制作简历的几个注意点,仅供参考。 一、个人信息 姓名*性别联系方式 (手机号)电子邮箱&#…

【前端】HTML基础(2)

文章目录 前言一、HTML常见标签1、 注释标签1.1 标题标签1.2 段落标签1.3 换行标签 2、 格式化标签2.1 加粗标签2.2 倾斜标签2.3 删除线标签2.4 下划线标签 3、 图片标签3.1 src属性3.2 alt属性3.3 title属性3.4 图片大小3.5 图片边框 4、 超链接标签4.1 属性4.2 属性 前言 这篇…

Chromium编译指南2024 Windows11篇-配置depot_tools工具(二)

前言 在《Chromium编译指南2024(一)》我们探讨了Chromium编译前的准备工作和Visual Studio安装。 接下来,我们将详细介绍如何下载、解压并配置depot_tools工具,以便顺利进行后续的开发工作。 1. 下载解压depot_tools 包 下载d…

Python | Leetcode Python题解之第73题矩阵置零

题目: 题解: class Solution:def setZeroes(self, matrix: List[List[int]]) -> None:m, n len(matrix), len(matrix[0])flag_col0 Falsefor i in range(m):if matrix[i][0] 0:flag_col0 Truefor j in range(1, n):if matrix[i][j] 0:matrix[i]…

学习 Rust 的第 17 天:如何使用traits定义抽象方法

大家好, 欢迎来到学习Rust的第17天,今天我们将研究Rust编程语言中的trait。 如果你还没有阅读昨天的文章,我建议你去读一下,因为我们今天学习的概念会建立在昨天学到的“通用类型”概念之上。 介绍 Rust中的trait定义了一组类…

DS:链表的分类

欢迎来到Harper.Lee的学习世界! 博主主页传送门:Harper.Lee的博客主页 想要一起进步的uu欢迎来后台找我哦! 链表的结构⾮常多样,以下情况组合起来就有8种(2 * 2 * 2)链表结构。下面我们依次来认识它们吧&am…

大数据面试题(十):Hive的高频面试考点(二)

文章目录 Hive的高频面试考点 一、请说明Hive中 sort by ,order by ,cluster by ,distribute by各代表什么意思

Mysql 8.0 -- 最新版本安装(保姆级教程)

Mysql 8.0 -- 最新版本安装(保姆级教程) ​​ 一,下载Mysql数据库: 官网链接:https://www.mysql.com/downloads/ 二,安装Mysql: 三,找到Mysql安装目录: 找到mysql安装目录&#xf…

【信息系统项目管理师知识点速记】资源管理:获取资源

获取资源:项目成功的关键 在项目管理中,获取资源是确保项目成功的关键步骤之一。本文将探讨获取资源的过程,包括输入、工具与技术以及输出。 输入 1. 项目管理计划 资源管理计划: 提供了如何获取项目资源的指南。成本基准: 提供了项目活动的总体预算。采购管理计划: 包…

攻防世界-NewsCenter

题目信息 分析过程 题目打开是有个输入框可以用来输入搜索信息,初步判断是个sql注入的题目。接下来判断能否进行sql注入: 输入 hi,有搜索结果,如下图: 输入hi’,无结果,如下图: 初步判定是hi‘后面还有单引…

MongoDB聚合运算符:$toHashedIndexKey

MongoDB聚合运算符:$toHashedIndexKey 文章目录 MongoDB聚合运算符:$toHashedIndexKey语法举例角度的双曲正切 $toHashedIndexKey计算并返回输入表达式的哈希值,其使用的哈希函数与MongoDB创建哈希索引相同。哈希函数将键值或字符串映射到固定…

设计模式(2)创造型设计模式

创建型模式 创建型模式1.工厂模式1.1 抽象工厂模式(Abstract factory)1.2 工厂方法模式(Factory Method)1.3 简单工厂模式(Simple Factory) 2. 建造者模式(Builder)3. 原型模式&…