从TypeScript教程吃透JS超集-2、TypeScript语言介绍

本文介绍了TypeScript的发展历程,由微软的AndersHejlsberg开发,它是基于JavaScript的强类型编程语言。文章详细讲述了TypeScript的类型系统、版本更新和学习前置,以及动态类型、静态类型和强类型的区别及其优缺点,强调了TypeScript在企业级项目中的优势和可能不适合小型项目的局限性。
摘要由CSDN通过智能技术生成

概述

简单了解TypeScript的基本信息:

  • 开发商:微软
  • 设计者:编程语言设计大师 Anders Hejlsberg,他也是 C# 和 .NET 的设计师
  • 本质:一种基于JavaScript语言的强类型编程语言
  • 目的:增强JavaScript的功能,使其更适合多人合作的企业级项目
  • 历史重大版本:

    2013年,微软的 Visual Studio 2013 开始内置支持 TypeScript 语言。
    2014年,TypeScript 1.0 版本发布。同年,代码仓库搬到了 GitHub。
    2016年,TypeScript 2.0 版本发布,引入了很多重大的语法功能。
    2018年,TypeScript 3.0 版本发布。
    2020年,TypeScript 4.0 版本发布。
    2023年,TypeScript 5.0 版本发布。

学习前置建议

学习TypeScript,你需要先了解并掌握大部分JavaScript的语法。因为在TS中大部分真正实际的功能都是依赖JavaScript引擎完成,TypeScript只是添加了一个类型系统。
本文章假定你已经了解JavaScript语言并掌握其语法,只介绍TypeScript引入的新语法,主要是类型系统。

什么是计算机语言类型(type)

计算机语言类型:是一组具有相同特征的值,即人为添加的一种约束编程和用法提示。 如果两个值具有某种共同的特征,就可以说,它们属于同一种类型。其主要目的是在软件开发过程中,为编译器和开发工具提供更多的验证和帮助,帮助提高代码质量,减少错误。

举例:比如321789,这两个值都能进行数值运算,进行数值运算是他们相同的特征,那么我们可以说他们是同类型的值,一般在计算机语言中,我们将其定义为数值类型(number)。

当某个值被确定为某类型时,这个值就应当具有该类型的所有特征,可以进行该类型的所有运算方法。在强类型语言中,凡是适用该类型的地方,都可以使用这个值;凡是不适用该类型的地方,使用这个值都会报错。比如在TS当中

let n:number; // 定义number类型变量 n
n = '99'; // 报错 不能将类型“string”分配给类型“number”。ts(2322)
n = 120; // 正常

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

计算机语言类型分类

动态类型、静态类型和强类型、弱类型

在JavaScript中,有一道前几年老生常谈的面试题,JS有哪些数据类型? 我们知道JS语言本身有一套类型系统,但它的类型系统很独特,并不像我们在学校学习的C、Java等语言,JavaScript的类型系统非常弱,而且没有使用限制,运算符可以接受各种类型的值。

在JavaScript中你会发现let n = 100; n = 'hello';是可以正常运行的,在运行时JS会做类型检查,但仍然通过运行,我们把这种变量类型可变(即可忽略)的类型系统称语言之为弱定义类型语言(即弱类型语言),其不具有很强的约束性,并且把这种运行期间才做数据类型检查的语言,称之为动态类型语言

所以综上所述,JavaScript即是弱类型语言,又是动态类型语言

而在TypeScript中,由于其引入了更强大、更严格的类型系统,上述JS案例在TS编译过程中便会报错Type 'string' is not assignable to type 'number'.。原因是变量赋值时,TypeScript已经推断确定了类型,后面就不允许再赋值为其他类型的值,即变量的类型是静态的。

我们把编译期间做数据类型检查的语言称之为静态类型语言,并且如果该语言变量类型一旦被指定,不通过强制类型转换手段进行变更变量类型时,该变量类型固定的语言称之为强定义类型语言(即强类型语言)

由上所述我们发现,TypeScript是静态类型语言,那么TypeScript是不是强类型语言?个人观点,由于TypeScript始于JavaScript,且终于JavaScript,即TypeScript的运行要先通过tsc编译成JavaScript语法,所以TypeScript并不存在运行时,且其只在编译时报错,但只要符合JS与法标准的,即便变量类型被改变,并不会中断编译,仍然输出标准JS结果。所以如果只讲TS,我认为他是强类型,如果讲依赖JS,TS只是提前了类型检查的时机,我认为其为弱类型

此观点仁者见仁,智者见智,类型的强弱是渐变量,没有黑白分明的定界,同一个语言有些地方类型约束强,有些地方弱,所以讨论强弱没什么意义。。

在这里插入图片描述

各种类型语言的优缺点
动态类型语言

优点:方便阅读,不需要写非常多的类型相关的代码;
缺点:不方便调试,命名不规范时会造成读不懂,不利于理解等;

静态类型语言

优点:结构非常规范,便于调试,方便类型安全,有利于代码的静态分析,发现错误,更好的 IDE 支持,做到语法提示和自动补全,有助于代码重构;
缺点:需要写更多类型相关代码,不清晰明了,丧失了动态类型的代码灵活性,增加了编程工作量,更高的学习成本,需要独立的编译工作,以及一些兼容性问题;

强类型语言和弱类型语言

强类型定义语言在速度上可能略逊色于弱类型定义语言;强类型定义语言带来的严谨性能够有效的避免许多错误;

小结

TypeScript有助于提高代码质量,保证代码安全,更适合用在大型的企业级项目。这就是为什么大量JavaScript项目转成TypeScript的原因。但这些引入静态类型的缺点使得 TypeScript不一定适合那些小型的、短期的个人项目。

  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值