当前位置: 首页 > news >正文

《TypeScript》系列之对比JavaScript,TypeScript的优势

概述

TypeScript是微软公司开发的一种基于JavaScript语言的编程语言,它的目的并不是创造一种全新的语言,而是增强JavaScript的功能,使其更适合多人合作的企业级项目。TypeScript可以看做是JavaScript的超集,即它继承了后者的全部语法,所有的JavaScript脚本都可以当做TypeScript脚本(有可能报错),此外它再增加了一些自己的语法。TypeScript对JavaScript添加的最主要部分,就是一个独立的类型系统。

类型的概念

类型指的是一组具有相同特征的值,如果两个值具有某种共同的特征,就可以说,它们属于同一种类型。

举例来说,123和456这两个值,共同特征就是都能进行数值运算,所以都属于“数值”(number)类型。

可以这样理解,类型是认为添加的一种编程约束和用法提示。主要目的是在软件开发过程中,为编译器和开发工具提供更多的验证和帮助

下面是一段简单的 TypeScript 代码,演示一下类型系统的作用。

function addOne(n:number) {return n + 1;
}

上面示例中,函数addOne()有一个参数n,类型为数值(number),表示这个位置只能使用数值,传入其他类型的值就会报错。

addOne('hello') // 报错

上面示例中,函数addOne()传入了一个字符串hello,TypeScript 发现类型不对,就报错了,指出这个位置只能传入数值,不能传入字符串。

JavaScript语言就没有这个功能,不会检查类型对不对。开发阶段很可能发现不了这个问题,代码也许就会原样发布,导致用户在使用时遇到错误。

作为比较,TypeScript是在开发阶段报错,这样有利于提早发现错误,避免使用时报错,另一方面,函数定义里面加入类型,具有提示作用,可以告诉开发者这个函数怎么用。

动态类型和静态类型

前面说了,TypeScript 的主要功能是为 JavaScript 添加类型系统。大家可能知道,JavaScript 语言本身就有一套自己的类型系统,比如数值123和字符串Hello

但是,JavaScript 的类型系统非常弱,而且没有使用限制,运算符可以接受各种类型的值。在语法上,JavaScript 属于动态类型语言。

请看下面的 JavaScript 代码。

// 例一
let x = 1;
x = 'hello';// 例二
let y = { foo: 1 };
delete y.foo;
y.bar = 2;

 上面的例一,变量x声明时,值的类型是数值,但是后面可以改成字符串。所以,无法提前知道变量的类型是什么,也就是说,变量的类型是动态的。

上面的例二,变量y是一个对象,有一个属性foo,但是这个属性是可以删除掉,并且还可以新增其他属性。所以,对象有什么属性,这个属性还在不在,也是动态,没法提前知道。

正式因为存在这些动态变化,所以JavaScript的类型系统是动态,不具有很强的约束。这对于提前发现代码错误,非常不利。

TypeScript引入了一个更强大、更严格的类型系统,属于静态类型语言。

上面的代码在TypeScript里面都会报错。

// 例一
let x = 1;
x = 'hello';// 例二
let y = { foo: 1 };
delete y.foo;
y.bar = 2;

上面实例中,例一的报错是因为变量赋值时,TypeScript以及推断确定了类型,后面就不允许再赋值为其他类型的值。即变量的类型是静态。例二的报错时因为对象的属性也是静态的,不允许随意增删。

TypeScript的作用,就是为JavaScript引入这种静态类型特征。

静态类型的优点

静态类型的很多好处,这也就是TypeScript想要达到的目的。

1)有利于代码的静态分析

有了静态类型,不必要运行代码,就可以确定变量的类型,从而推断代码有么有错误,这个就较多代码的静态分析。

这对于大型项目非常重要,单单在开发阶段运行静态检查,就可以发现很多问题,避免交付有问题的代码,大大降低了线上风险。

2)有利于发现错误

由于每个值、每个变量、每个运算符都有严格的类型约束,TypeScript就能轻松发现拼写错误、语义错误和方法调用错误,节省程序员的时间。

let obj = { message: '' };
console.log(obj.messege); // 报错

上面实例中,不小心把message拼错了,写成message。TypeScript就会报错,指出没有定义过这个属性。JavaScript遇到这种情况是不报错的

const a = 0;
const b = true;
const result = a + b; // 报错

上面的实时合法的JavaScript代码,但是没有意义,不应该将数值a与布尔值b相加。TypeScript就会直接报错,提示运算符+不能用于数值和布尔值的相加。

function hello() {return 'hello world';
}hello().find('hello'); // 报错

上面实例中,hello()返回的是一个字符串,TypeScript发现字符串没有find()方法, 所以就报错了。如果是JavaScrip,只有到运行阶段才会报错。

3)更好的IDE支持,做到语法提示和自动补全

4)提供了代码文档

5)有助于代码重构

静态类型的缺点

1)丧失了动态类型代码的灵活性

2)增加了变成工作量

        - 有了类型之后,程序员不仅需要编写功能,还需要编写类型声明,确保类型正确。这增加了不少工作量,又是会显著做场项目的开发时间

3)更高的学习成本

        - 类型系统通常比较复杂,要学习更多东西,要求开发者付出更高的学习成本

4)引入了独立的编译步骤

        - 原生的JavaScript代码,可以直接在JavaScript引起运行,添加类型系统之后,就多出了一个单独编译步骤,检查类型是否正确,并将TypeScript代码转成 JavaScript代码,这样才能运行。

5)兼容性问题

        - TypeScript依赖JavaScript生态,需要用到很多外部模块。但是,过去大部分 JavaScript 项目都没有做 TypeScript 适配,虽然可以自己动手做适配,不过使用时难免还是会有一些兼容性问题。

相关文章:

《TypeScript》系列之对比JavaScript,TypeScript的优势

概述 TypeScript是微软公司开发的一种基于JavaScript语言的编程语言,它的目的并不是创造一种全新的语言,而是增强JavaScript的功能,使其更适合多人合作的企业级项目。TypeScript可以看做是JavaScript的超集,即它继承了后者的全部…...

Notepad++使用技巧

显示远程连接的文件目录 自动完成:函数自动提示 自动输入:输入一半括号自动补全另一半 自动关联 .pc文件识别为C 列模式 按住Alt不松手,可以直接范围选择,便于编辑选择的区域 关键行筛选 1.进入搜索页面的标记 2.选中标…...

React 中报Type error: Could not find a declaration file for module ‘qs‘.(已解决)

ts项目引入qs 比如 nextjs 或者reactjs npm install --save-dev types/qs 确保你的tsconfig.json文件中有以下设置 {"compilerOptions": {"types": ["qs"]}} 如果你的项目中没有tsconfig.json文件,你可以创建一个。在项目根目录下创…...

【Linux】:Linux环境与版本

以下哪个命令输出Linux内核的版本信息 A.uname -r B.vmstat C.sar D.stat uname -r 查看linux内核版本信息 vmstat 报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息 sar 主要帮助我们掌握系统资源的使用情况,特别是内存和CPU的使用情况 stat 用于显示…...

PNG转EPS,包括Latex导入

在电脑TEXLIVE文件夹里中找到bmeps.exe TEXLIVE\2022\bin\win32 可以新建一个文件夹picture(图片和exe文件必须在一个文件夹里),将bmeps.exe复制出来,方便后续大量图片操作 导入png图片 新建一个txt文件,命名为Fig1.…...

Visual Studio 2022 cmake编译 PP-OCRv4

1 环境准备 下载PaddleOCR PaddleOCR C 部署代码位于 PaddleOCR\deploy\cpp_infer目录下 paddle_inference paddle_inference opencv 这里使用已经安装好的opencv4.5.5下载dirent-master.zip 下载dirent-master.zip, 解压并复制dirent.h文件到PaddleOCR\deploy\cpp_infer目录下…...

学习笔记|串口与PC通信的接线|移植驱动程序|串口通信实战|STC32G单片机视频开发教程(冲哥)|第二十一集(上):串口与PC通信

目录 1.串口与PC通信的接线芯片与芯片之间的通讯:芯片与电脑之间的通讯: 2.利用实验箱示例代码移植驱动程序3.串口通信实战最小工程代码移植编译提示错误:undefined identifier 1.串口与PC通信的接线 上节试验是串口和电脑进行一个通信&…...

关于Mybaits缓存....

记Mybaits缓存踩的坑 1.问题提出 最近开发一个记录操作前后修改内容的功能,获取修改前数据比较简单,直接从数据库获取,记录修改后的功能也比较简单,直接将用户修改的内容封装成po对象,然后两个比对就可以了&#xff…...

Vue axios调用springboot接口获取数据库数据并显示到网页

axios调用接口获取数据 可以查看简述化的此文 点击 此文简述化文章 PS**由于我自己的本次springboot项目内容很多&#xff0c;所以只是截取了其中关于axios调用接口获取数据的内容&#xff0c;还请大家了解工作原理即可** 前端 添加axios和vue2链接 <script src"htt…...

12-bean创建流程3

文章目录 1 bean实例化前 2. bean实例化doCreateBean&#xff08;&#xff09; 1 bean实例化前 createBean方法里面的resolveBeforeInstantiation方法,InstantiationAwareBeanPostProcessor接口创建一个代理对象返回 try {// Give BeanPostProcessors a chance to return a p…...

volatile关键字 和 i = i + 1过程

本文是复制粘贴,请直接看原文 原文链接:Java并发编程&#xff1a;volatile关键字解析 - Matrix海子 - 博客园 (cnblogs.com) ------------------------------------------------------------------------------------------------------------------- Java并发编程&#xff1…...

ubuntu20 安装 cmake 3.27

1. 下载cmake3.27 建议从cmake官网下载安装&#xff0c;虽然比较慢&#xff0c;但从清华镜像里下载的cmake文件不全。 我下载的是&#xff1a;cmake-3.27.7.tar.gz 博客 ubuntu安装cmake的三种方法&#xff08;超方便&#xff01;&#xff09;-CSDN博客 里面提供了三种方法&am…...

faster lio 回环 加入GTSAM优化的记录

首先感谢这位博主的文章&#xff1a;https://blog.csdn.net/weixin_41281151/article/details/125371285&#xff0c;其中部分代码参考于改博主中的github&#xff1a; https://github.com/kahowang/FAST_LIO_SAM 不同的是&#xff0c;我使用的是faster lio进行更改&#xff0c…...

深入剖析 深度学习中 __init()__函数和forward()函数

目录 前言1. __init()__函数2. forward()函数3. 两者关系 前言 再看代码时&#xff0c;发现init函数和forward函数都有参数&#xff0c;具体是怎么传参的呢&#xff1f; 为了更方便的讲解&#xff0c;会举简单的代码例子结合讲解。 forward() 和 __init__() 是神经网络模型类…...

BUUCTF学习(一):SQL注入,万能密码

1、场景 2、题目 3、解题 用户名&#xff1a;admin or 11# 密码&#xff1a;123456 4、解析SQL注入 “SQL注入是一种常见的Web应用程序漏洞&#xff0c;攻击者可以通过注入的SQL语句获取数据库的敏感信息&#xff0c;对网站用户的数据安全造成威胁。SQL注入的特点包括广泛性、隐…...

基于springboot实现心灵治愈心理健康平台系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现心灵心理健康平台系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个心灵治愈交流平台 &#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论…...

百度Apollo自动驾驶

百度从2013年开始布局自动驾驶领域&#xff0c;十年来一直坚持压强式的、马拉松式的研发投入&#xff0c;以技术创新驱动长期发展。百度Apollo L4级自动驾驶运营测试里程累计已超5000万公里&#xff0c;拥有自动驾驶专利族超4600件&#xff0c;其中高级别自动驾驶专利族数全球第…...

数据迁移库工具-C版-01-HappySunshineV1.0-(支持Gbase8a)

一、测试环境信息 名称值CPUIntel(R) Core(TM) i5-1035G1 CPU 1.00GHz操作系统CentOS Linux release 7.9.2009 (Core)内存3G逻辑核数2Gbase8a版本8.6.2-R43.34.27468a27HappySunshine版本V1.0 二、支持功能 序号功能1GBASE8a到GBASE8a的库级数据迁移。2批量加载。&#xff…...

【sv】 pack/unpack stream

https://www.amiq.com/consulting/2017/05/29/how-to-pack-data-using-systemverilog-streaming-operators/ https://www.amiq.com/consulting/2017/06/23/how-to-unpack-data-using-the-systemverilog-streaming-operators/...

二、使用DockerCompose部署RocketMQ

使用DockerCompose进行部署 docker-compose的版本为 Docker Compose version v2.2.3 RocketMQ的部署方式以及各自的特点 单master模式 只有一个 master 节点&#xff0c;如果master节点挂掉了&#xff0c;会导致整个服务不可用&#xff0c;线上不宜使用&#xff0c;适合个人学习…...

DelphiOpenAI:原生集成OpenAI API,赋能Delphi开发者构建智能应用

1. 项目概述&#xff1a;DelphiOpenAI&#xff0c;一个为Delphi开发者打造的AI桥梁如果你是一名Delphi开发者&#xff0c;看着Python、JavaScript社区热火朝天地集成各种AI能力&#xff0c;自己却苦于没有成熟、好用的原生库&#xff0c;只能望“AI”兴叹&#xff0c;那么今天介…...

Nature论文检索正在失效,Perplexity底层检索逻辑重构预警(仅限科研骨干内部流通的3条技术简报)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Nature论文检索正在失效&#xff0c;Perplexity底层检索逻辑重构预警&#xff08;仅限科研骨干内部流通的3条技术简报&#xff09; 检索信号衰减的实证观测 近期对Nature、Science主站及PubMed Centra…...

codebase-digest:自动化代码库分析工具的设计原理与工程实践

1. 项目概述&#xff1a;当代码库变成“黑盒”&#xff0c;我们如何快速理解它&#xff1f;你有没有接手过一个庞大而陌生的代码库&#xff1f;面对成千上万的文件和错综复杂的依赖关系&#xff0c;那种感觉就像被扔进了一个没有地图的迷宫。传统的做法是&#xff0c;你得像考古…...

Clawforce:开源AI智能体团队基础设施,实现持久化与安全协作

1. 项目概述&#xff1a;Clawforce&#xff0c;一个为持久化AI智能体团队构建的基础设施最近在AI智能体领域&#xff0c;一个词被反复提及&#xff1a;“Agentic AI”&#xff0c;即智能体驱动的AI。这不再是让单个AI模型回答一个问题那么简单&#xff0c;而是构建一个能够自主…...

分布式架构实战:全平台矩阵管理系统的技术实现与性能优化

前言在数字化运营进入全域竞争的今天&#xff0c;多平台账号集群管理已成为企业与开发者的核心技术挑战。传统单体架构的矩阵工具普遍存在算力弹性不足、账号关联风险高、跨平台适配复杂、AI 能力割裂等问题&#xff0c;导致 90% 以上的自研矩阵系统最终以失败告终。本文基于生…...

一分钟看懂大模型备案

大模型备案&#xff0c;全称 “生成式人工智能服务上线备案”&#xff0c;是国内面向公众提供大模型服务的法定合规流程&#xff0c;核心是审核模型安全、数据合规与内容可控&#xff0c;未备案违规上线最高罚一千万元&#xff0c;该处罚依据主要来自两大核心法规&#xff1a;1…...

安达发|自动排单软件:破工程机械困局,助智能制造升级

安达发APS高级生产计划智能排产排程自动排单软件系统推荐_MES 在工程机械制造领域&#xff0c;挖掘机、起重机、混凝土泵车等产品结构复杂&#xff0c;一台设备涉及成千上万个零部件&#xff0c;订单个性化程度高、生产周期长&#xff0c;生产排单一度成为困扰企业发展的核心痛…...

电能质量治理三相光伏逆变器设计【附程序】

✨ 长期致力于MPPT、电能质量治理、改进哈里斯鹰、重复控制、预置补偿角、模糊PI研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;基于混沌哈里斯鹰算法…...

DDR3内存训练(Training)完全解析:从原理到代码,深入浅出

DDR3内存训练(Training)完全解析:从原理到代码,深入浅出 目录 一、为什么需要内存训练? 二、DDR3训练的核心原理 三、训练流程详解:一场精密的三步仪式 四、代码实战:从初始化到训练完成...

AI写作净化器:识别与消除AI文本痕迹的实用指南

1. 项目概述&#xff1a;为什么我们需要一个“AI写作净化器”&#xff1f; 如果你和我一样&#xff0c;每天都要和AI助手打交道&#xff0c;无论是用它写邮件、生成报告&#xff0c;还是草拟技术文档&#xff0c;那你一定对那种“AI味儿”深有体会。那种感觉就像喝了一杯过度调…...