JavaScript与TypeScript的区别

JavaScript和TypeScript是当今前端开发中最常见的两种编程语言。JavaScript是前端开发的基石,而TypeScript则在JavaScript的基础上进行了增强,加入了类型系统等特性。

1. 语言基础:JavaScript与TypeScript概述
JavaScript:

JavaScript(简称JS)是一种动态类型、解释型的编程语言,广泛用于前端开发。它被所有现代浏览器原生支持,并且在Node.js环境中也可以用于后端开发。JavaScript是一个弱类型语言,意味着变量的类型在运行时才能确定。

TypeScript:

TypeScript(简称TS)是由微软开发的一个开源语言,它是JavaScript的超集。TypeScript对JavaScript进行了增强,最显著的特性是静态类型检查。它允许开发者在编写代码时指定变量、函数参数和返回值的类型,从而增加了代码的可维护性和可读性。TypeScript代码会在编译时转换为标准的JavaScript代码。

2. 静态类型与动态类型

JavaScript 是一种动态类型语言,变量类型是在运行时确定的。例如:

let message = "Hello, World!";
message = 42; // 这在JavaScript中是合法的

在上面的示例中,message 变量初始是一个字符串,但它被重新赋值为一个数字,这是JavaScript允许的,因为变量类型是在运行时决定的。

TypeScript 通过类型注解来增加静态类型检查,使得开发者能够在编译阶段发现类型错误。例如:

let message: string = "Hello, World!";
message = 42; // 编译错误:不能将数字赋值给字符串类型的变量

TypeScript会在编译时对类型进行检查,确保数据类型的正确性,这有助于避免潜在的错误。

3. 类型注解与接口(Interfaces)

TypeScript的核心优势之一是静态类型系统,它通过类型注解来增强JavaScript的类型安全性。我们可以显式地为变量、函数、类等添加类型注解。

函数的类型注解:

在JavaScript中,函数参数和返回值的类型是动态的,不做任何约束,而TypeScript允许对函数进行类型注解:

function add(a: number, b: number): number {return a + b;
}add(2, 3);  // 返回 5
add("2", "3");  // 编译错误,传入的是字符串而非数字

 接口的使用:

TypeScript还支持接口(Interfaces),它用于定义对象的结构,从而增加代码的可维护性和可读性:

interface Person {name: string;age: number;
}const person: Person = {name: "John",age: 30,
};

在这个例子中,Person接口确保了person对象必须有name(字符串)和age(数字)属性。如果缺少任何属性,TypeScript会在编译阶段报错。

4. 类与继承

JavaScript的类与继承

在ES6中,JavaScript引入了类的概念,并支持继承。例如:

class Animal {constructor(name) {this.name = name;}speak() {console.log(`${this.name} makes a sound`);}
}class Dog extends Animal {speak() {console.log(`${this.name} barks`);}
}const dog = new Dog("Rex");
dog.speak(); // 输出: Rex barks

TypeScript的类与继承

TypeScript增强了类的功能,除了支持ES6类的语法,还提供了更强的类型系统。在TypeScript中,我们可以为类的属性和方法添加类型注解,并且可以更好地处理访问修饰符(public、private、protected)。

class Animal {name: string;constructor(name: string) {this.name = name;}speak(): void {console.log(`${this.name} makes a sound`);}
}class Dog extends Animal {speak(): void {console.log(`${this.name} barks`);}
}const dog = new Dog("Rex");
dog.speak(); // 输出: Rex barks

在这个例子中,name属性的类型为string,而Dog类继承自Animal类,并且重写了speak方法。

5. 编译与运行时

JavaScript 是一种解释型语言,浏览器或Node.js会在运行时直接解释和执行JavaScript代码。

TypeScript 需要在开发过程中先经过编译(或转换)成JavaScript代码,才能在浏览器或Node.js中运行。TypeScript的编译器会检查类型错误,确保代码的正确性。

# 编译TypeScript代码

tsc app.ts

此命令将TypeScript文件(app.ts)编译成一个JavaScript文件(app.js),然后你可以在浏览器中运行它。

6. 类型推断与类型保护

JavaScript的类型推断:

由于JavaScript没有类型系统,开发者在编写代码时无法获得任何类型检查或类型推断的帮助。类型错误只能在运行时才发现。

TypeScript的类型推断:

TypeScript虽然是静态类型语言,但也有智能的类型推断机制。即使你没有显式指定类型,TypeScript也能根据上下文推断变量的类型。例如:

let number = 10; // TypeScript推断number为number类型
number = "Hello"; // 编译错误,类型不匹配

TypeScript还支持类型保护机制,允许你根据条件判断,细化类型,从而提高代码的安全性。例如:

function example(input: string | number) {if (typeof input === "string") {console.log(input.toUpperCase()); // input被推断为string} else {console.log(input.toFixed(2)); // input被推断为number}
}

 

7. 常见使用场景与选择

何时使用JavaScript?

  • 项目较小,开发周期较短。
  • 对类型检查需求不高,主要依赖于灵活性。
  • 快速原型开发或需要兼容各种浏览器的情况。
  • 团队对JavaScript语言已经非常熟悉,不需要静态类型系统的辅助。

何时使用TypeScript?

  • 项目复杂,涉及到大量的业务逻辑和多人协作。
  • 需要高可维护性、良好的代码提示与类型安全。
  • 代码基础庞大,使用静态类型系统可以帮助提前发现潜在的错误。
  • 与第三方库交互时,类型系统可以帮助提升开发效率,减少运行时错误。
8. 总结

JavaScript与TypeScript是现代前端开发中非常重要的两种语言。JavaScript作为一种动态类型语言,提供了灵活性和广泛的生态系统支持。而TypeScript则在此基础上加入了静态类型检查、接口、类的增强等特性,使得开发过程更加规范化和可维护。

通过合理的选择和实践,开发者能够更好地利用这两种语言的优势,提升开发效率和代码质量。

 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

es数据同步(仅供自己参考)

数据同步的问题分析: 当MySQL进行增删改查的时候,数据库的数据有所改变,这个时候需要修改es中的索引库的值,这个时候就涉及到了数据同步的问题 解决方法: 1、同步方法: 当服务对MySQL进行增删改的时候&…

从0开始学习Linux——Yum工具

往期目录: 从0开始学习Linux——简介&安装 从0开始学习Linux——搭建属于自己的Linux虚拟机 从0开始学习Linux——文本编辑器 上一个章节我们简单了解了Linux中常用的一些文本编辑器,本次教程我们将学习yum工具。 一、Yum简介 Yum(全名…

高级AI记录笔记(一)

学习位置 B站位置:红豆丨泥 UE AI 教程原作者Youtube位置:https://youtu.be/-t3PbGRazKg?siRVoaBr4476k88gct素材自备 提前将动画素材准备好 斧头蓝图 斧头武器插槽 混合空间 就是改了一下第三人称模版的动画蓝图 行为树中不用Wait实现攻击完…

ffmpeg的下载与安装

废话不多说, 下载地址,得找官网,不然得注意是不是有夹带私活。 FFmpeg 这个是目前的最新版本; 下载的时候看下自己要的版本,我的是Windows10; 解压后的版本长这样: 接下来进行环境变量的配置&…

【http协议笔记】-- 浏览器简单分析get、post请求

环境:为了了解http协议的交互方式,使用edge浏览器简单分析协议内容,给刚入门的小伙伴分享一下,方便大家学习。 以菜鸟教程的网站为例子: 分析post: 请求url: 请求参数: 请求相应&a…

SpringBoot【实用篇】- 热部署

文章目录 目标:1.手动启动热部署2.自动启动热部署4.禁用热部署 目标: 手动启动热部署自动启动热部署热部署范围配置关闭热部署 1.手动启动热部署 当我们没有热部署的时候,我们必须在代码修改完后再重启程序,程序才会同步你修改的信息。如果我们想快速查…

vue3相对vue2有哪些改变?

https://blog.csdn.net/weixin_44475093/article/details/112386778 https://blog.csdn.net/userDengDeng/article/details/114941956 一、vue3的新特性: 1、速度更快 vue3相比vue2 重写了虚拟Dom实现编译模板的优化更高效的组件初始化undate性能提高1.3~2倍SSR速度…

数据库概论实验一

声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 本文章对数据库概论实验一_求出一箱(每箱装100个)零件的重量 并将输出结果-CSDN博客文章浏览阅读2.7k次,点赞4次,收藏25次。实验数据库,表…

绿色能源发展关键:优化风电运维体系

根据QYResearch调研团队最新发布的《全球风电运维市场报告2023-2029》显示,预计到2029年,全球风电运维市场的规模将攀升至307.8亿美元,并且在接下来的几年里,其年复合增长率(CAGR)将达到12.5%。 上述图表及…

gerrit 搭建遇到的问题

1、启动Apache,端口被占用 : AH00072: make sock: could not bind to address (0S 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。: AH00072: make sock: could not bind to address 0.0.0.:443 a AH00451: no listening sockets available, shutti…

栈和队列相关题 , 用队列实现栈, 用栈实现队列 ,设计循环队列 C/C++双版本

文章目录 1.用队列实现栈2.用栈实现队列3. 设计循环队列 1.用队列实现栈 225. 用队列实现栈 思路: 使用两个队列,始终保持一个队列为空。 当我们需要进行压栈操作时,将数据压入不为空的队列中(若两个都为空,则随便压…

关于STM32在代码中的而GPIO里面的寄存器(ODR等)不需要宏定义的问题

1.GPIO为什么需要宏定义地址 在 STM32 这样的微控制器中,硬件寄存器的地址是固定的并且特定于每个外设(比如 GPIOA、GPIOB 等)。为了方便代码访问这些硬件寄存器,我们通常会使用宏定义来指定每个外设的基地址。这样做有几个理由&a…

kimi智能助手,5大高阶玩法,95%的人还不知道

01 智能搜索:精准定位,一键获取最佳答案 Kimi,作为您的AI助手,拥有卓越的网络搜索能力。 我们能够迅速穿梭于信息海洋,为您筛选出五篇精选网络文章,并提供直接的网址链接。 Kimi的总结能力同样出色,特别适合那些追求效率、不愿深陷长篇文章的用户。 02 PDF速读:快速把…

关于数学建模的一些介绍

为了更好了解世界,我们可以通过数学来描述许多特定的现象,而数学模型就是现实世界的理想化,不过它永远不能完全精确地表示现实世界。 在这篇文章中,我将介绍一些数学建模的基本概念以及相应的基础知识,而关于更具体的…

远翔升压恒流芯片FP7209X与FP7209M什么区别?做以下应用市场摄影补光灯、便携灯、智能家居(调光)市场、太阳能、车灯、洗墙灯、舞台灯必看!

一,概述 FP7209是台湾远翔一款非同步升压LED驱动IC,封装有2种,分别是SOP-8L(EP), TSSOP-14L(EP)。控制外部开关NMOS。 输入低启动电压2.8V,可支持单节锂电池供电。工作电压5V,VFB反馈电压0.25V,反馈电压低…

算法日记 18 day 二叉树

最后三题,二叉树就结束啦!!! 题目:修剪二叉搜索树 669. 修剪二叉搜索树 - 力扣(LeetCode) 给你二叉搜索树的根节点 root ,同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树…

hashcat使用

0.介绍 Hashcat 软件是一款非常强大的、开源的、号称世界上最快的密码破解软件,配合强大的字典,可以破译超过百分之九十的密码。Hashcat 目前支持各类公开算法高达240类,市面上公开的密码加密算法基本都支持,有 Microsoft LM 哈希…

mysql 安装 windows

新版安装 新版本安装 如果出现initializing database无法安装 则用我当前版本传送门 如MySQL 安装时没有developer default 选项 解决方法传送门 如果上述还不行 可以选择full 汉化下载 传送门

基于Redis缓存机制实现高并发接口调试

创建接口 这里使用的是阿里云提供的接口服务直接做的测试,接口地址 curl http://localhost:8080/initData?tokenAppWithRedis 这里主要通过参数cacheFirstfalse和true来区分是否走缓存,正常的业务机制可能是通过后台代码逻辑自行控制的,这…

vue常见题型(1-10)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 2.2双向绑定的原理是什么vue框架采用的是数据双向绑定的方式,由三个重要部分构成2.2.1.ViewModel2.2.2 双向绑定2.2.3.1.编译Compile2.2.3.2.依赖收集 3…