TypeScript的10个缺点

news2024/12/25 9:28:50

在这里插入图片描述

文章目录

    • 1. 语法繁琐
    • 2. 难以集成到一些工作流程
    • 3. 学习成本高
    • 4. 代码量多
    • 5. 编译时间长
    • 6. 在小型项目中无必要性
    • 7. 可读性降低
    • 8. 抽象层次增加
    • 9. 缺少类型定义
    • 10. 生态系统

1. 语法繁琐

TypeScript 的类型注解、泛型等语法增加了代码的复杂度和学习难度,对小型项目来说使用 TypeScript 可能比 JavaScript 更麻烦。

下面是一个使用 TypeScript 的类定义,示例中定义了一个父类和一个继承自父类的子类:

class Animal {
  public name: string;
  protected age: number;
  constructor(name: string, age?: number) {
    this.name = name;
    this.age = age ? age : 0;
  }
  public move(distance: number) {
    console.log(`${this.name} moved ${distance} meters.`);
  }
}

class Dog extends Animal {
  private readonly breed: string;
  constructor(name: string, breed: string, age?: number) {
    super(name, age);
    this.breed = breed;
  }
  bark() {
    console.log(`${this.name} is a ${this.breed} dog and is barking.`);
  }
}

const dog = new Dog("Buddy", "German Shepherd", 2);
dog.move(100);
dog.bark();

相比于原生的 JavaScript这段代码添加了许多类型注解、访问修饰符等语法,使代码相对繁琐,特别是对于刚刚接触 TypeScript 的开发人员来说可能会感到不适应。而且如果是一些小型项目来说,使用 TypeScript 可能会带来更多的负担。

2. 难以集成到一些工作流程

对于一些注重快速迭代、自由度高的团队,增加 TypeScript 处理过程可能拖延项目进度。

TypeScript 的难以集成到某些工作流程是因为在某些工具、框架和库的处理上需要一些额外的设置和工作。

下面是一些可能需要应对的情况:

  1. 一些第三方包没有 TypeScript 类型定义:在使用 TypeScript 开发时,如果使用到一些第三方包,需要编写相应的 TypeScript 类型定义文件。但是有时这些依赖包没有相应的类型定义文件,这就需要自己编写,这可能会拖延项目进展,增加开发难度。

  2. 集成到前端构建工具:比如一些前端工具和框架,如 Babel、webpack、Rollup 等,如果要使用 TypeScript,需要额外添加 TypeScript 相关插件或者配置,这对于没有使用 TypeScript 的项目来说需要额外的学习成本和时间成本。

  3. 与编辑器的集成:许多编辑器支持 TypeScript,如 VSCode、WebStorm 等,但是有时可能需要配置编辑器才能合适地支持 TypeScript,或者解决一些编辑器上的 bug。

  4. 与团队的配合:使用 TypeScript 要求团队成员要有相应的 TypeScript 知识,并且遵循相应的 TypeScript 规范,否则可能会引起一些风格上的问题或者导致代码冲突。

3. 学习成本高

使用 TypeScript 需要花费时间学习其语法,对于刚接触 TypeScript 的开发人员来说可能会感到困惑。

TypeScript 相对于 JavaScript 有所增加的类型注解、泛型、访问修饰符、接口等等概念,可能会给开发人员带来学习上的额外负担。

下面是 TypeScript 学习成本高主要体现在哪些方面。

  1. 类型系统TypeScript 是一种静态类型的编程语言,需要开发人员掌握类型系统的相关概念,如变量类型、函数类型、泛型等等,这对于初学者来说可能需要一定的学习成本。

  2. 类型注解TypeScript 需要使用注解来描述变量、函数、类等的类型,这是 JavaScript 中没有的一种语法,因此需要进一步学习。

  3. 泛型:泛型是 TypeScript 中一个重要的概念,对于初学者来说可能比较难以理解。同时,泛型的语法也比较繁琐,可能需要一定的时间去理解和记忆。

  4. 工具链:使用 TypeScript 还需要掌握一些 TypeScript 相关工具和库的使用,比如 TypeScript 编译器、类型定义文件、编辑器插件等等,这同样需要一定的学习成本。

  5. 社区支持:与 JavaScript 相比,TypeScript 相对较新,因此 TypeScript 生态环境、相关工具库、社区支持等方面可能不如 JavaScript 成熟,这可能对开发者的学习和使用带来一些额外的负担。

4. 代码量多

由于需要添加类型注解,单个 TypeScript 文件会比同等 JavaScript 文件更大,导致大项目中需要编写更多代码。

TypeScript 可以通过类型注解、接口等更加严格地定义变量的类型和函数的参数、返回值等,这使得代码更加灵活但也更加繁琐。因此,相对于 JavaScript,使用 TypeScript 可能需要编写更多的代码。

下面是一个示例:

// JavaScript 版本
function sum(a, b) {
  return a + b;
}
// TypeScript 版本
function sum(a: number, b: number): number {
  return a + b;
}

从上面的代码可以看出,TypeScript 版本相比于 JavaScript 版本需要增加更多的类型注解,虽然注解可以使函数更加明确,但也需要编写更多的代码。

再举一个 TypeScript 定义类的例子:

// JavaScript 版本
class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  sayHi() {
    console.log(`Hi, I'm ${this.name}.`);
  }
}

// TypeScript 版本
class Person {
  private name: string;
  private age: number;
  constructor(name: string, age: number) {
    this.name = name;
    this.age = age;
  }
  public sayHi(): void {
    console.log(`Hi, I'm ${this.name}.`);
  }
}

从上面的代码可以看出,在 TypeScript 中,需要通过访问修饰符明确数据成员的访问权限,需要使用冒号指定类型,并且需要显式地声明函数的返回类型。因此,相比于 JavaScript,TypeScript 可以使代码更加严格、更加清晰,但也需要编写更多的代码。

5. 编译时间长

使用 TypeScript 会增加代码编译的时间,对于需要快速反馈的项目可能不适合。

6. 在小型项目中无必要性

对于小规模的项目来说,使用 TypeScript 对改进代码质量的影响不会非常显著,可能完全没有必要添加 TypeScript

7. 可读性降低

由于添加了类型注解、泛型等语法,代码可能变得更难以阅读和理解。

8. 抽象层次增加

使用 TypeScript 可能会增加代码中的抽象层次,对于正在开发的项目、零散的代码更难以快速编写。

9. 缺少类型定义

不是所有的 JavaScript 库和框架都有相应的 TypeScript 类型定义文件,这就需要手动编写类型定义文件,这是一个比较繁琐的工作。

10. 生态系统

尽管 TypeScript 在近些年来使用越来越广泛,但是相比原生 JavaScript 的生态系统还是不够成熟。使用 TypeScript 可能需要依赖于第三方库或者自己编写类型定义文件。

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

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

相关文章

LC-1130. 叶值的最小代价生成树(贪心、区间DP、单调栈)

1130. 叶值的最小代价生成树 难度中等272 给你一个正整数数组 arr,考虑所有满足以下条件的二叉树: 每个节点都有 0 个或是 2 个子节点。数组 arr 中的值与树的中序遍历中每个叶节点的值一一对应。每个非叶节点的值等于其左子树和右子树中叶节点的最大…

chatgpt赋能python:Python中的逆序操作

Python 中的逆序操作 在 Python 中,逆序(reverse)操作指的是将一个序列的元素顺序反转,也即将序列中最后一个元素变成第一个,倒数第二个元素变成第二个,以此类推。逆序有很多实际用途,比如根据…

基于C语言的平衡二叉树操作(包含完整代码)

平衡二叉树的定义: 为避免树的高度增长过快,降低二叉排序树的性能,规定在插入和删除二叉树结点时,要保证任意结点的左、右子树高度差的绝对值不超过1,将这样的二义树称为平衡二叉树AVL (Balanced Binary Tree),简称平衡树。 平衡…

【源码解析】流控框架Sentinel源码深度解析

前言 前面写了一篇Sentinel的源码解析,主要侧重点在于Sentinel流程的运转原理。流控框架Sentinel源码解析,侧重点在整个流程。该篇文章将对里面的细节做深入剖析。 统计数据 StatisticSlot用来统计节点访问次数 SpiOrder(-7000) public class Statis…

PCL 改进点云双边滤波算法

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 我们先来回顾一下之前该算法的计算过程,在二维图像领域中,双边滤波算法是通过考虑中心像素点到邻域像素点的距离(一边)以及像素亮度差值所确定的权重(另一边)来修正当前采样中心点的位置,从而达到平滑滤波效果。…

PHPMySQL基础(五):模拟登录后跳转+会话存储功能实现

PHP&MySQL基础(一):创建数据库并通过PHP进行连接_长风沛雨的博客-CSDN博客 PHP&MySQL基础(二):通过PHP对MySQL进行增、删、改、查_长风沛雨的博客-CSDN博客 PHP&MySQL基础(三):处理查询SQL返…

一图看懂 tqdm 模块:一个可在循环和命令行中使用的快速、可扩展的进度条,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 tqdm 模块:一个可在循环和命令行中使用的快速、可扩展的进度条,资料整理笔记(大全) 🧊摘要🧊模块图&…

软考高级架构师笔记-5计算机网络

目录 1. 前言 & 考情分析2. 网络功能和分类2.1 通信技术3. OSI七层模型及协议3. 1 局域网和广域网协议3. 2 协议3. 3 交换技术、路由、传输介质4 IP地址5 网络存储技术6 其它考点8. 结语1. 前言 & 考情分析 前文回顾: 软考高级架构师笔记-1计算机硬件软考高级架构师笔…

chatgpt赋能python:Python中未定义变量的默认值

Python中未定义变量的默认值 在Python编程中,有时候我们会使用未经定义的变量。如果这些变量没有被定义,那么它们将没有任何值。在这篇文章中,我们将讨论Python中未定义变量默认值的问题,并深入研究为什么这些默认值如此重要。 …

华为OD机试真题B卷 Java 实现【寻找关键钥匙】,附详细解题思路

一、题目描述 小强正在参加《密室逃生》游戏,当前关卡要求找到符合给定 密码K(升序的不重复小写字母组成)的箱子,并给出箱子编号,箱子编号为1~N。 每个箱子中都有一个字符串s,字符串由大写字母&#xff0…

改进YOLOv5,利用HRNet高分辨率特征金字塔的全新物体检测突破

目录 一、介绍1、物体检测的背景与重要性2、HRNet和YOLOv5的概述(1)HRNet的概述(2)YOLOv5的概述 二、HRNet的架构1、HRNet的基本单元2、HRNet的高分辨率特征金字塔3、HRNet的体系结构4、HRNet的特点5、HRNet的局限性 三、YOLOv5的…

chatgpt赋能python:Python中转化为列表的详细介绍

Python中转化为列表的详细介绍 Python是一门高级编程语言,它使用起来简单易学,被广泛应用于大数据处理、科学计算、机器学习等领域。在Python编程中,列表是一种非常重要的数据结构,它允许我们存储和操作一组数据,并且…

jenkins —— pipeline基础语法与示例

一、Jenkins介绍 二、Jenkins Pipeline介绍 Jenkins Pipeline总体介绍 1.Pipeline 是Jenkins 2.X核心特性,帮助Jenkins实现从CI到CD与DevOps的转变 2.Pipeline 简而言之,就是一套运行于Jenkins上的工作流框架,将原本独立 运行于单个或者多个…

GPT-4 的 6 个最佳使用场景

https://www.howtogeek.com/884077/best-uses-for-chatgpt-4/ 作者:SYDNEY BUTLER 无论是在 ChatGPT 中还是通过 API,对 OpenAI 的 GPT-4 模型的访问比 GPT-3.5 限制更多。这意味着你需要慎重考虑在何种情况下使用 GPT-4,并选择性地将最适合…

浙大知识图谱基础:学习笔记

0 基础知识 知识图谱中,知识的结构化表示主要有符号表示和向量表示两类方法。符号表示包括:一阶谓词逻辑,语义网络,描述逻辑和框架系统等。当前主要采用基于图的符号化知识表示,最常用的是有向标记图。 有向标记图分为…

SpringBoot统一功能处理(统一处理用户登陆权限验证、统一异常处理以及统一数据返回格式)

目录 1. SpringBoot统一功能处理简介 2. 统一处理用户登陆验证 2.1 原生SpringAOP实现统一登陆验证的问题 2.2 Spring拦截器实现用户统一登陆验证 2.3 扩展: 统一访问前缀添加 3. 统一异常处理 4. 统一数据返回格式 4.1 统一数据返回格式的必要性 4.2 实现统一数据返…

C++ vector类成员函数介绍

目录 🤔vector模板介绍: 🤔特点: 🤔vector的成员函数: 🔍vector构造函数: 🔍vector赋值函数 🔍vector容器的判断函数 resize函数的重点内容: …

chatgpt赋能python:Python中的并:优化代码执行效率的利器

Python中的并:优化代码执行效率的利器 Python作为一种优秀的编程语言,被广泛使用于各种各样的项目中。然而,随着程序的不断扩张,代码的复杂度日益增加,执行效率也愈加遇到了严峻的挑战。在这种情况下,Pyth…

Linux系统下imx6ull QT编程—— Ubuntu 下编写程序(一)

Linux QT编程 文章目录 Linux QT编程前言一、C简介二、C环境设置1.安装编译 C 语言和 C的环境。2.创建文件编写代码3.编译运行代码 总结 前言 绍在 Ubuntu 在终端窗口下使用 vi/vim 编辑一个 C源文件。通过编写最简单的示例“Hello,World QCX”。 一、C简介 C (c…

【分布式应用】ELK企业级日志分析系统

一、ELK 简介 ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。 1.1 ELK各组件介绍 ElasticSearch: 是基于Lucene(一个…