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. 关于ML.NET v1.0 RC的发布说明

    ML.NET是面向.NET开发人员的开源和跨平台机器学习框架(Windows,Linux,macOS).使用ML.NET,开发人员可以利用他们现有的工具和技能组,通过为情感分析,推荐,图像分类等常见场 ...

  2. python:数据库连接操作入门

    模块 import pymssql,pyodbc 模块说明 pymssql和pyodbc模块都是常用的用于SQL Server.MySQL等数据库的连接及操作的模块,当然一些其他的模块也可以进行相应的 ...

  3. log4j2.yml配置文件

    # https://blog.csdn.net/u010598111/article/details/80556437 # 共有8个级别,按照从低到高为:ALL < TRACE < DEB ...

  4. 【java 多线程】多线程并发同步问题及解决方法

    一.线程并发同步概念 线程同步其核心就在于一个“同”.所谓“同”就是协同.协助.配合,“同步”就是协同步调昨,也就是按照预定的先后顺序进行运行,即“你先,我等, 你做完,我再做”. 线程同步,就是当线 ...

  5. Mysql免安装版配置教程和常用命令图

    Mysql免安装版配置教程 图文版 配置环境变量 新建一个my.ini文件,添加下面内容 [mysqld] basedir=C:\\software\Mysql\mysql-5.7.14-winx64 ...

  6. 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU特性介绍(3)- 命名规则

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的命名规则. 打开任何一款i.MX RT系列芯片的Data Sheet均可找到如下命名规则表,以i.MX ...

  7. 痞子衡嵌入式:飞思卡尔i.MX RT系列MCU启动那些事(13)- 从Serial(1-bit SPI) EEPROM/NOR恢复启动

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RT系列MCU的Serial EEPROM/NOR恢复启动. 在前几篇里痞子衡介绍的Boot Device都属于主动启 ...

  8. 痞子衡嵌入式:ARM Cortex-M文件那些事(8)- 镜像文件(.bin/.hex/.s19)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式开发里的image文件(.bin, .hex, .s19). 今天这节课是痞子衡<ARM Cortex-M文件那些事>主 ...

  9. windows powershell一些操作

  10. Linux文件权限与属性详解 之 SUID、SGID & SBIT

    Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...