第一章、TS语言简介

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

在这里插入图片描述

1.ES各种版本

这些术语指的是 ECMAScript(JavaScript 的标准化版本)的不同版本。目前主流编码支持ES6

版本发布时间新特性
es5 (ECMAScript 5)2009 年 12 月新的内置对象方法,如 Array.prototype.forEach, Array.prototype.map, Array.prototype.filter, Array.prototype.reduce, Object.keys, Object.create 等
支持JSON序列化和反序列化:JSON.stringify 和 JSON.parse 方法
es6 (ECMAScript 2015)2015 年 6 月块作用域变量 (let 和 const)
模板字符串 (template strings)
箭头函数 (arrow functions)
类 (class)
解构赋值 (destructuring assignment)
默认参数 (default parameters)
扩展运算符 (spread operator)
剩余参数 (rest parameters)
迭代器和生成器 (iterators and generators)
Map 和 Set 数据结构
Promises
模块 (modules)
es2016-ES7 (ECMAScript 2016)2016 年 6 月指数操作符 (exponentiation operator, **)
es2017-ES8 (ECMAScript 2017)2017 年 6 月异步函数 (async/await)
共享内存和 Atomics (shared memory and Atomics)
Object.values/Object.entries
String padding (String.padStart, String.padEnd)
es2018-ES9 (ECMAScript 2018)2018年6月Async Iterators
Rest/Spread in Object Destructuring
Array.prototype.flat 和 Array.prototype.flatMap
Symbol 描述 (Symbol.description)
es2019-ES10 (ECMAScript 2019)2019 年 6 月Optional Catch Binding
Array.fromAsync
String.trimStart/trimEnd
Object.fromEntries
es2020-ES11 (ECMAScript 2020)2020 年 6 月空值合并操作符:Nullish Coalescing Operator (??)
可选链:Optional Chaining (?.)
Dynamic Import (import() 表达式)
Promise.allSettled
新数据类型(用于表示任意大小的整数):BigInt
es2021-ES12 (ECMAScript 2021)2021 年 6 月外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
es2022-ES13 (ECMAScript 2022)2022 年 6 月Top-level await
Error Causation (Error.cause)
Private Class Methods
Private Class Fields Inheritance
es2023-ES14 (ECMAScript 2023)2023 年 6 月Decorators (正式成为标准的一部分)
Record and Tuple Types
Array.prototype.toReversed
Array.prototype.toSorted
Array.prototype.with

2.TS各种版本

版本发布时间新特性
TypeScript 1.x2012 年 10 月类型注解
类和接口
模块
命名空间
泛型
TypeScript 2.x2016 年 10 月更好的类型推断
更严格的类型检查
支持 ES6/ES2015 模块
支持装饰器
TypeScript 3.x2018 年 9 月至 2019 年 3 月支持 ES2018 和 ES2019 特性
改进了类型推断
改进了泛型类型
支持项目引用 (project references)
TypeScript 3.72019 年 10 月可选链 (optional chaining)
空值合并 (nullish coalescing)
增强的类型推断
TypeScript 4.x2020 年 8 月至 2021 年 2 月更强大的类型系统
改进的类型别名递归
改进的类型推断
支持 ES2020 特性
更严格的类型检查选项
改进的工具支持
TypeScript 5.x2022 年 8 月至 2023 年 2 月支持 ES2022 特性
更严格的类型检查选项
改进的类型推断
改进的类型别名递归支持
TypeScript 5.42023 年 8 月更严格的类型检查选项
改进的类型推断
改进的类型别名递归支持

TS和ES的异同

类别TypeScriptES6(ECMAScript 2015)
定义TypeScript 是一种免费和开源的纯面向对象编程语言。它由微软开发和维护。ES6 是 ECMAScript(ES)的一种版本,它是由 ECMA 国际标准化的脚本语言规范。
解释TypeScript 用于消除开发错误。ES6 在开发时间上相对更灵活。
数据类型TypeScript 支持所有基本数据类型。ES6 不支持所有数据类型。
功能TypeScript 包含了泛型和类型注解、推断、枚举和接口等功能。ES6 不支持这些功能。

3.JS的动态类型

JavaScript 的这种动态特性使得它使用非常灵活,可以天马行空的发挥,本身定位就是个脚本语言,不要求过多,挺好,上手快,门槛低,大家都可以写,点赞。

  • 动态类型(Dynamic Typing):

    • 变量类型在运行时确定:在 JavaScript 中,变量的类型不是在编写代码时指定的,而是在程序运行时根据赋给变量的值来确定的。
    • 类型可以改变:这意味着变量可以在程序的不同部分存储不同类型的数据。例如,一个变量可以先存储一个数字,然后存储一个字符串。
    • 类型推断:JavaScript 引擎会根据赋给变量的值来自动推断变量的类型。
  • 解释性(Interpreted):

    • 逐行执行:JavaScript 代码通常是由 JavaScript 引擎逐行解释执行的,没有预编译的说法,而不是像编译型语言那样先编译成机器代码再执行。

    • 无需编译步骤:这使得 JavaScript 代码可以在编写后立即运行,无需显式的编译步骤。

  • 弱类型(Weakly Typed):

    • 类型转换宽松:JavaScript 允许隐式的类型转换,这意味着在某些情况下,当操作数的类型不匹配时,JavaScript 会自动将它们转换为相同的类型来进行运算。
    • 类型检查不严格:与强类型语言相比,JavaScript 不会在运行前进行严格的类型检查。例如,true + “2” 的结果是 “true2”,而不是抛出类型错误。

以下是几个例子来说明这一点:

let x; // x 的类型是 undefined
x = 10; // x 的类型现在是 number
x = "Hello"; // x 的类型现在是 string
x = true; // x 的类型现在是 boolean
x = [1, 2, 3]; // x 的类型现在是 array (实际上是一种特殊的 object)
x = { name: "Alice" }; // x 的类型现在是 object
x = function () {}; // x 的类型现在是 function

4.TS的静态类型

​ JavaScript这种动态特性也可能导致一些常见的错误,比如类型不匹配导致的运行时错误,团队协助难。随着大前端的流行,微软让TypeScript 通过引入静态类型检查来解决这些问题,它允许你在编译时指定变量的类型,并确保在整个程序中类型的一致性。

JavaScript 是一种动态类型、解释性(也称为弱类型)的语言,这意味着变量可以在运行时被赋予任何类型,并且变量的类型可以根据赋给它的值而改变。

TypeScript 的静态类型是一种编程语言特性,它允许你在编写代码时明确指定变量、函数参数、函数返回值等的类型。这种类型检查发生在编译阶段,而不是运行时,这就是所谓的“静态类型”。

  • 类型声明:在 TypeScript 中,你可以为变量、函数参数、函数返回值等指定类型,指定类型后不能在修改。

    # 声明一个数字类型的变量
    let age: number = 25;
    # 申明一个字符串类型
    let name: string = 'L.Z'
    
  • 类型推断:TypeScript 会根据赋给变量的初始值自动推断其类型,所以你习惯了写js脚本的,写TS可以花五分钟平稳过渡

    # 这里 TypeScript 会自动推断 age 的类型为 number。
    let age = 25; 
    
  • 类型检查:TypeScript 编译器会在编译阶段检查类型是否正确。如果类型不匹配,编译器会报错,阻止代码编译通过,特别现在的各种大厂的IDE职能检查,编码的时候自动提升异常,强大的一P,例如,尝试给一个被声明为 number 类型的变量赋一个字符串值会导致编译错误。

  • 接口(Interfaces)和类型别名(Type Aliases):接口和类型别名可以用来定义复杂的类型结构。例如,定义一个对象的形状或一组相关类型的集合。

  • 泛型(Generics):泛型允许你创建可重用的函数或类,这些函数或类可以处理任何类型的数据,同时保留类型安全性。

    # 定义一个泛型函数
    function identity<T>(arg: T): T { 
       return arg; 
    }
    
  • 类型兼容性:TypeScript 支持类型兼容性,这意味着如果一个类型可以赋值给另一个类型,则认为它们是兼容的。例如,一个 string 类型可以赋值给 any 类型,因为 string 是 any 的子类型,这个完全是JS的玩法

  • 类型系统:TypeScript 的类型系统非常强大,支持联合类型、交叉类型、元组类型、枚举类型等多种类型构造。
    这些类型构造可以帮助你精确地描述复杂的数据结构。

  • 类型注解:你可以在函数参数、变量声明等地方使用类型注解来指定类型。

    # 生命函数指定出入参类型
    function add(x: number, y: number): number { 
      return x + y; 
    }。
    

5.TS各种阅历码农学习入口

ts官网根据你自身的学习环境,提供几种文档入口:

官网:TypeScript: The starting point for learning TypeScript (typescriptlang.org)

Nodejs:TypeScript 中文网: 文档 - TypeScript 5.0 (nodejs.cn)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值