typescript的必要性及使用

这篇具有很好参考价值的文章主要介绍了typescript的必要性及使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 前言

作为一个前端语言,Javascript从最初只是用来写页面,到如今的移动终端、后端服务、神经网络等等,它变得几乎无处不在。如此广阔的应用领域,对语言的安全性、健壮性以及可维护性都有了更高的要求。尽管ECMAScript标准在近几年有了长足的进步,但是在类型检查方面依然毫无建树。在这种情况下TypeScript应运而生。

2 为什么要使用TypeScript

在JavaScript的开发过程中,相信经常会遇到以下这种场景:

  1. 场景一: 你需要调用一个别人开发的函数 function funcName(paramA,paramB,paramC,paramD){…},但是很不幸,这个家伙没有留下任何注释,为了弄清楚参数的类型,你不得不硬着头皮去读里面的逻辑;
  2. 场景二: 为了保证代码的健壮性,你很负责任的对函数的每个输入参数进行了各种假设,导致函数内一多半代码都是对参数(类型、个数等)的判断逻辑;
  3. 场景三: 老板很看好你,让你维护一个重要的底层类库,你殚精竭虑优化了一个参数类型,在提交代码前,不知道有多少地方调用,你是否感到脊背发凉?
  4. 等等…

以上情况归结底,是因为 JavaScript 是一门动态弱类型语言,对变量的类型非常宽容,而且不会在这些变量和它们的调用者间建立结构化的契约。如果你长期在没有类型约束的环境下开发,就会造成“类型思维”的缺失,养成不良的编程习惯,这也是做前端开发的短板之一,因此使用TypeScript对于前端开发者而言是迫切并且必要的。

使用 TypeScript 还能带来其他好处。比如,Visual Studio Code 具有强大的自动补全、导航和重构功能,这使得接口定义可以直接代替文档,同时也提高了开发效率,降低了维护成本。更重要的是,TypeScript 可以帮助团队重塑“类型思维”,使前端开发者从代码的编写者蜕变为代码的设计者。

如果说 JavaScript 是一匹野马,那么 TypeScript 就是束缚这匹野马的缰绳。作为骑士的你,自然可以张开双臂,放飞自我,但如果不是技艺超群,恐怕会摔得很惨。然而如果抓住了缰绳,你即可闲庭信步,亦可策马扬鞭。这就是 TypeScript 的价值,它会让你在前端开发之路上走得更稳,走得更远。

3 什么是TypeScript

什么是 TypeScript呢?根据官方的定义,它是拥有类型系统的 JavaScript 的超集,可以编译成纯JavaScript。在这里需要注意三点:

  1. 类型检查,TypeScript会在编译阶段进行严格的静态类型检查,这意味着你在代码编写阶段就能发现一些错误,而不必带到线上运行时才能发现;
  2. 语言扩展:TypeScript 会包括来自 ECMAScript 6 和未来提案中的特性,比如异步操作和装饰器,也会从其他语言借鉴某些特性,比如接口和抽象类;
  3. 工具属性:TypeScript 能够编译成标准的 JavaScript,可以在任何浏览器、操作系统上运行,无需任何运行时的额外开销,从这个角度上讲,TypeScript 更像是一个工具,而不是一门独立的语言

4 TypeScript基础使用

4.1 基础类型

Ts包含类型如下:

  1. 数字类型(number):用来标识双精度64为浮点值,包含整数、浮点数等,没有单独的整型、浮点型;
  2. 字符串(string):一个字符系列,使用单引号(‘)或双引号(“)来表示字符串类型。反引号(`)来定义多行文本和内嵌表达式;
  3. 布尔(boolean): 值只有true和false;
  4. 数组: 无关键字,声明变量:
let arr: number[] = [1, 3]  let arr:Array<number> = [1,2]

5.元组: 无关键字,元组类型用来表示已知元素个数和类型的数组,每个元素的类型不必相同,但是对应位置的类型需要相同;

let x: [string, number];x = ['Runoob', 1];    // 运行正常x = [1, 'Runoob'];    // 报错console.log(x[0]);    // 输出 Runoobx.push(33)console.log(x[2]) // 报错// 注意x可以继续push多个字段,但是无法访问

6.枚举(enum): 枚举类型用于定义类型集合

数字枚举:默认情况下,第一个枚举值是 0,然后每个后续值依次递增 1, 但是,你可以通过特定的赋值来改变给任何枚举成员关联的数字,如下例子,我们从 3 开始依次递增

enum Color {Red,  // 0Green,  // 1Blue // 2};let c: Color = Color.Blue;console.log(c);    // 输出 2console.log(Color[0]) // 输出Redenum Color1 {Red = 3, // 3Green, // 4Blue // 5}

7.void: 用于标识方法的返回值,表示没有返回值

8.null: 标识对象值缺失;

9.undefined: 用于初始化变量为一个未定义的值

10.never: 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值

11.Object:object表示非原始类型,也就是除number,string,boolean,symbol,null或undefined之外的类型。

12.any:任意值是 TypeScript 针对编程时类型不明确的变量使用的一种数据类型;(注意:不要轻易使用any,使用any跟使用javascript效果一样了)

它常用于以下三种情况:

  • 变量的值会动态改变时,比如来自用户的输入,任意值类型可以让这些变量跳过编译阶段的类型检查;
  • 改写现有代码时,任意值允许在编译时可选择地包含或移除类型检查;
  • 定义存储各种类型数据的数组时

13.联合类型:可以通过管道(|)将变量设置多种类型,赋值时可以根据设置的类型来赋值

var val:string|number val = 12 console.log("数字为 "+ val) val = "Runoob" console.log("字符串为 " + val)

4.2 函数

// 包含两个number类型参数和返回值,不能直接return。必须return一个数字function add(x: number, y: number): number {    return x + y;} // 可选参数, (这里没写返回值,利用了typeScript的类型推断能力)function buildName(firstName: string, lastName?: string, a?:number) {    if (lastName)        return firstName + " " + lastName;    else        return firstName;}// 参数默认值function buildName(firstName: string, lastName: string = 'default_name') {    return firstName + " " + lastName;}// 有一种情况,我们不知道要向函数传入多少个参数,这时候我们就可以使用剩余参数来定义,// 剩余参数语法允许我们将一个不确定数量的参数作为一个数组传入function buildName(firstName: string, ...restOfName: string[]) {    return firstName + " " + restOfName.join(" ");}let employeeName = buildName("Joseph", "Samuel", "Lucas", "MacKinzie");

4.3 接口(interface)

接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法。

interface IPerson {     firstName:string,     lastName:string,     sayHi: ()=>string } const customer:IPerson = {     firstName:"Tom",    lastName:"Hanks",     sayHi: ():string =>{return "Hi there"} }

接口可以通过继承来扩展自己,继承使用关键字 extends, 可以单继承和多继承

interface Person {    age:number } interface Musician extends Person, person1 {    instrument:string }

4.4 类(class)

TypeScript 是面向对象的 JavaScript,类描述了所创建的对象共同的属性和方法。
定义类的关键字为 class,后面紧跟类名,类可以包含以下几个模块(类的数据成员):

  • 字段 − 字段是类里面声明的变量。字段表示对象的有关数据。
  • 构造函数 − 类实例化时调用,可以为类的对象分配内存。
  • 方法 − 方法为对象要执行的操作。
class Car {     // 字段     engine:string;     // 构造函数     constructor(engine:string) {         this.engine = engine     }      // 方法     disp():void {         console.log("发动机为 :   "+this.engine)     } }const car = new Car('')

5 总结

总体而言,TypeScript是一个很好的工具,即使您没有使用过它,也可以将它纳入您的学习计划中。因为它能在你脑中播下“类型思维”的种子,而思维方式决定了编程习惯,编程习惯奠定了工程质量,工程质量划定了能力边界。在面对越来越复杂的前端场景,TypeScript所提供的思维方式,能够让你在以后的开发中长期受益。

作者:京东物流 吴云阔

来源:京东云开发者社区文章来源地址https://www.toymoban.com/news/detail-507495.html

到了这里,关于typescript的必要性及使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 分布式操作系统的必要性及重要性

    总有人在各个平台留言或者私信问LAXCUS分布式操作系统的各种问题,尤其是关于分布式操作系统的应用市场、价值、意义之类的问题。我们团队做LAXCUS分布式操作系统,也不是头脑凭空发热,是基于我们之前的大量产品设计、经验逐渐一步步做起来。当今已经进入智能时代,

    2024年02月08日
    浏览(55)
  • Vue项目做单元测试必要性

    单元测试 的必要性 一般在我们的印象里,单元测试都是测试工程师的工作,前端负责代码就行了; 百度 搜索Vue单元测试,联想词出来的都是“单元测试有必要吗?” “单元测试是做什么的?”虽然我们平时项目中一般都会有测试工程师来对我们的页面进行测试“兜底”,

    2023年04月09日
    浏览(47)
  • 实验室信息化建设必要性

    市场监管总局2021年9月14日发布《关于进一步深化改革促进检验检测行业做优做强的指导意见》明确到2025年,检验检测体系更加完善,创新能力明显增强,发展环境持续优化,行业总体技术能力、管理水平、服务质量和公信力显著提升,涌现一批规模效益好、技术水平高、行

    2024年02月11日
    浏览(57)
  • 图文讲解Redis延时双删原因及必要性

    目录 一、前言 二、常见更新策略 2.1 先删缓存,再更新数据库 2.2 先更新数据库,再删除缓存 2.3 普通双删 2.4 延迟双删 三、是否必要建议 我们在实际项目中经常会使用到Redis缓存用来缓解数据库压力,但是当更新数据库时,如何保证缓存及数据库一致性,一般我们采用延时

    2024年02月16日
    浏览(38)
  • 暴雨灾害频发,防洪评价与洪水建模预测的必要性

    防洪评价全流程与报告编制及HEC-RAS水动力模型实际工程应用 核心优势: 1、根据防评导则要求,制定及编排课程内容。较以往其他不同,本课程实现了全过程、全阶段的防评内容培训, 共6全天授课,是目前关于防洪评价最详细的课程 。学员参加本次课程后,可直接上手,可

    2024年02月12日
    浏览(34)
  • 软件安全测试包含哪些内容和方法?安全测试报告的必要性

    软件安全测试是一种通过模拟真实攻击的方式,对软件系统进行全面的安全性评估和测试,以发现潜在的安全漏洞和弱点,是确保软件系统安全性的重要措施。在进行软件安全测试时,我们需要了解测试的内容和方法,以及为什么进行安全测试报告的必要性。 一、软件安全测

    2024年02月09日
    浏览(48)
  • 谈一谈前端私有组件库的必要性(组件库系列一)

    工作多年遇到各种各样的项目,往往在固定的岗位或者说固定的业务部门,同类型的项目出现的频率极高。很多同学对于组件库这个概念更多的使用场景,可能是拿到开源的一些组件库开箱即用。如PC端的ElementUI、Ant-design、移动端的vant之类的。这些开源的组件库能够很大程度

    2024年02月07日
    浏览(35)
  • 高防服务器面对DDOS攻击的威胁有何必要性

    高防服务器面对DDOS攻击的威胁有何必要性?分布式拒绝服务(DDoS)攻击是一种常见而危险的网络攻击形式,它可以使目标网络服务器过载,导致服务不可用。本文将深入探讨DDoS攻击的威胁,以及高防服务器在抵御这种攻击中的重要性。了解DDoS攻击的威胁和采取相应的防护措

    2024年02月10日
    浏览(48)
  • 企业开展开源安全治理必要性及可行性详细分析,疯狂涨知识

    面对以上五个严重的挑战,从企业解决的角度来说,可以聚焦为三个主要应对举措: 多做行业头部最佳实践调研:其实近两年,互联网、金融、运营商、智能制造等多个行业的头部企业,还是有不少企业在开源安全治理方面已经有自己的一些最佳实践和成功经验了。虽然说不

    2024年04月11日
    浏览(46)
  • 计算机网络——计算机网络体系结构(2/4)-分层的必要性(五层协议原理体系结构)

    目录 物理层 数据链路层 网络层 运输层 应用层 计算机网络是个非常复杂的系统。 早在最初的ARPANET设计时就提出了分层的设计理念。 \\\"分层\\\"可将庞大而复杂的问题,转化为若干较小的局部问题,而这些较小的局部问题就比较易于研究和处理。 下面,我们以五层原理结构体系

    2024年02月07日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包