JavaScript的痛点

众所周知,前端开发“三剑客”分别是HTML、CSS以及JS,其中JS由于其灵活简单等特点获得了大家的青睐,但是成也萧何败萧何,由于JS设计初衷是浏览器的嵌入式脚本语言,作为脚本语言本身就不像Java等工程语言一样适合大项目开发。之前用JS写过前端程序,由于JS没有命名空间且变量类型为弱类型,当代码写到几千行以上时随着JS文件及变量的增多,程序运行逻辑将会乱成一团,后续开发及维护举步维艰。这些问题是JS本身特点带来的,因为JS在设计初始并没有想到后面的前端开发逻辑会这么复杂,虽然JS号称基于对象的语言,但是却很难模块化。为解决该问题,一些JS模块化框架应运而生,例如Require.js、sea.js等,但这只是权宜之计,并没从根本上解决JS本身语言特性。

解决JS语言本身的问题,看起来只有两种方法,要么JS实现一次重大升级,要么重新设计一种语言来代替JS。但是听起来很美好,实际却不可行。首先JS发展至今,语言本身相对成熟,最多会小修小补,颠覆性的升级不大可能。其次,JS已经拥有了大批的用户及得到了各大浏览器的全面支持,可以看成网页的一种规范标准了,设计一种全新的语言取代JS基本无望。于是,微软采用曲线救国,设计了一种TypeScript,定义为JavaScript的超集。意思就是JavaScript可以做的,我可以做,JavaScript不能做的,我还可以做。同时熟悉JS的迁移到TypeScript上面基本无成本,因为TypeScript全面兼容JavaScript,语法定义等基本类似。

TypeScript方案

TypeScript针对JavaScript弱类型、没有命名空间、难以模块化等缺点对症下药,规定了变量必须是强类型,同时添加any类型兼容JS的弱类型。同时带来了严格的面向对象定义,每一个ts文件需要定义成一个或多个类,同时向外面暴露接口。我把TypeScript比作Java版的JavaScript,很多对象的定义及使用跟Java像极了。这样从语言上解决了JS的问题,编程过程中我只需考虑对象之间的关系而不是JS文件、变量之间的关系,大大提高了前端生产力且提高了程序健壮性及可维护性。

目前三大主流前端框架(谷歌的Angular、Facebook的React.js以及Vue.js)都已经支持TypeScript语言,其中Angular更是如此。它本身就是用TypeScript写出且规定TypeScript为默认编程语言。Angular提供了很多功能强大的库函数,通过引入模版即可快速使用。

TypeScript为什么全面兼容JavaScript及所有浏览器呢?因为它是“始于JavaScript,归于JavaScript”。TypeScript有一个编译器,所有TypeScript程序都可以编译成不同规范标准的JavaScript程序,因此并不改变目前的JS生态。下面是一个用TS写的一个类及编译成JS的例子:

TS定义一个对象:

class BankAccount {
balance = 0;
deposit(credit: number) {
this.balance += credit;
return this.balance;
}
}

经过编译器转换成的JS代码:

var BankAccount = (function () {
function BankAccount() {
this.balance = 0;
}
BankAccount.prototype.deposit = function(credit) {
this.balance += credit;
return this.balance;
};
return BankAccount;
})();

TypeScript——初步认识的更多相关文章

  1. 1.初步认识TypeScript

    简介:typescript是C#之父主导的一门语言,本质上是向Javascript语言添加了可选的静态类型和基于面向对象的诸多特性.相当于javascript的超集,其包含es6.由于是和C#之父创造 ...

  2. 初步学习TypeScript

    使用Visual Studio Code搭建TypeScript开发环境 1.TypeScript是干什么的 ? TypeScript是由微软Anders Hejlsberg(安德斯·海尔斯伯格,也是 ...

  3. 使用Typescript来写javascript

    使用Typescript来写javascript 前几天尝试使用haxejs来写javascript,以获得静态类型带来的益处.虽然成功了,但很快发现将它与angularjs一起使用,有一些不太顺畅的 ...

  4. JavaScript面向对象轻松入门之抽象(demo by ES5、ES6、TypeScript)

    抽象的概念 狭义的抽象,也就是代码里的抽象,就是把一些相关联的业务逻辑分离成属性和方法(行为),这些属性和方法就可以构成一个对象. 这种抽象是为了把难以理解的代码归纳成与现实世界关联的概念,比如小狗这 ...

  5. 前端常用技术概述--Less、typescript与webpack

    前言:讲起前端,我们就不能不讲CSS与Javascript,在这两种技术广泛应用的今天,他们的扩展也是层出不穷,css的扩展有Less.Sass.Stylus 等,js的超集有Typescript等. ...

  6. 初探typescript

    学习任何知识都不是一蹴而就的.typescript也是如此.今天我们来初步的了解一下typescript的安装与编译.以及基础的语法知识. 第一步:安装ts 第二步:在安装好的文件夹里面,写上ts文件 ...

  7. 什么是Less、typescript与webpack?

    前端常用技术概述--Less.typescript与webpack 前言:讲起前端,我们就不能不讲CSS与Javascript,在这两种技术广泛应用的今天,他们的扩展也是层出不穷,css的扩展有Les ...

  8. angular2+typescript在asp.net MVC Web项目上的实现

    网上现在还没有关于angular2+typescript在asp.net mvc web项目上的实现的系统介绍,这里我也只是探索到了一个简单的方式,还有很多问题没能解决.但是能有个好的开头也值得记录一 ...

  9. TypeScript 类型推导及类型兼容性

    类型推导就是在没有明确指出类型的地方,TypeScript编译器会自己去推测出当前变量的类型. 例如下面的例子: let a = 1; 我们并没有明确指明a的类型,所以编译器通过结果反向推断变量a的类 ...

随机推荐

  1. BBS论坛(二十九)

    29.帖子详情页布局 (1)front/hooks.py @bp.errorhandler def page_not_found(): return render_template('front/fr ...

  2. java代码之美(4)---guava之Immutable(不可变)集合

    Immutable(不可变)集合 一.概述 guava是google的一个库,弥补了java语言的很多方面的不足,很多在java8中已有实现,暂时不展开.Collections是jdk提供的一个工具类 ...

  3. Jenkins 无法捕获构建脚本错误问题

    Jenkins 版本 2.121.1 编写构建脚本执行,发现脚本执行出错,不会中断构建过程,导致最后展现的构建结果是错误的. 原因:构建脚本头部加入 #!/bin/bash ,jenkins会将脚本放 ...

  4. Java基础8:深入理解内部类

    更多内容请关注微信公众号[Java技术江湖] 这是一位阿里 Java 工程师的技术小站,作者黄小斜,专注 Java 相关技术:SSM.SpringBoot.MySQL.分布式.中间件.集群.Linux ...

  5. 互联网寒冬,阿里Ant Design还开坑,程序员该何去何从?

    金山都成立三十年了,不得不感叹中国在这三十年中,互联网确实是一步一步的在改变人们生活的方方面面,随着国家的发展,一大批企业搭上了互联网这趟高速列车走过了这几十年的风风雨雨,当然也造就了一批批传统行业无 ...

  6. Python机器学习笔记 异常点检测算法——Isolation Forest

    Isolation,意为孤立/隔离,是名词,其动词为isolate,forest是森林,合起来就是“孤立森林”了,也有叫“独异森林”,好像并没有统一的中文叫法.可能大家都习惯用其英文的名字isolat ...

  7. 《C#并发编程经典实例》学习笔记—2.4 等待一组任务完成

    问题 执行几个任务,等待它们全部完成. 使用场景 几个独立任务需要同时进行 UI界面加载多个模块,并发请求 解决方案 Task.WhenAll 传入若干任务,当所有任务完成时,返回一个完成的任务. 重 ...

  8. MVC_分页方法调用

    /// <summary> /// 分页页脚 /// </summary> /// <param name="currentPageIndex"> ...

  9. Java开发笔记(七十四)内存溢出的两种错误

    前面介绍的几种异常,其实都存在这样那样的逻辑问题,属于程序员的编码手误.还有一大类系统错误,表面上看不出什么问题,但是程序仍然运行不下去,兹举二例说明.第一个例子且看下列的测试代码: // 测试内存溢 ...

  10. vue 路由的使用

    ue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用.vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来.传统的页面应用 ...