之前作后端的时候主要是微软的项目为主,随着公司业务发展须要后来转向偏前端项目的开发,今天我到了聊聊微软主导的TypeScript
,如你使用过C#或Visual Basic .NET等语言,你会很熟悉。javascript
在微软强大的visual studio2012
版本未出以前,对Javascript
的支持度却如屎同样渣,直到VS2012才有了质的飞越,估计微软内部在作VS升级同时也一样发现了Javascript
的缺陷,由于它不适合构建大规模应用开发,我估计同步就那个时候开始Typescript
研发,或许更早。微软于2012年9月12日正式发布VS2012版本,紧随其后于2012年10月1日对外公布了Typescript
,同时宣布开源。html
能够说Typescript
到来和微软开源战略离不开,能够说安德斯·海尔斯伯格(Anders Hejlsberg)是开源信徒,参与了.NET
核心引擎 CoreCLR
开源,随后他主导了Typescript
开源。前端
能够说Typescript
到来和微软开源战略离不开,能够说安德斯·海尔斯伯格(Anders Hejlsberg)是开源信徒,参与了.NET
核心引擎 CoreCLR
开源,随后他主导了Typescript
开源。java
TypeScript
是 JavaScript
的超集,所以任何 JavaScript 都是合法的 TypeScript(很是像 C 和 Objective-C 的关系),TypeScript
结合了类型检查和静态分析,显式接口。TypeScript
是微软的开源项目,它是由C#
之父安德斯·海尔斯伯格(Anders Hejlsberg)发起的。git
JavaScript
只是一个脚本语言,并不是真正设计用于开发大型 Web 应用,JavaScript
没有提供类和模块等概念,对于一个真正的应用开发,TypeScript
扩展JavaScript
并实现了这些特性。程序员
TypeScript主要特色包括:typescript
JavaScript
JavaScript
应用,支持全部浏览器,主机和操做系统JavaScript
代码兼容性TypeScript
从核心语言方面和类概念的模行方面对JavaScript
对象模型进行扩展,所以现有的 JavaScript
代码无需作任何修改即可与TypeScript
一块儿使用,TypeScript
经过类型注解提供编译时的静态类型检查。TypeScript
可处理已有的 JavaScript
代码,并只对其中的 TypeScript
代码进行编译。后端
咱们来看表:api
对比项目 | TypeScript | JavaScript | 注意 |
---|---|---|---|
基本类型 | boolean number string Array Tuple Enum any void null undefined never object | string number boolean null undefined symbol | TypeScript 中 object 表示的是否是 JavaScript 基本类型的类型 |
变量声明 | let const var | let const var | 基本一致 |
接口 | interface | 无 | TypeScript 的核心是类型检查,所以接口充当了命名这些类型的角色 |
类 | class abstract class readonly … | class 无 abstract class | 基本一致,但不一样的可能发生在将来,TypeScript 使用 private 来定义私有,而 JavaScript 将来极有可能将 #.xx 来定义私有写入标准。TypeScript 支持抽象类,只读等等。 |
函数 | N | N | 基本一致,参数赋默认值,剩余参数等等,惟一不一样的是 TypeScript 支持?可选参数 |
泛型 | Generics | 无 | 泛型是一个特别灵活的可重用指定不一样类型来控制具体类型的类型,TypeScript 支持 |
枚举 | Enums | 无 | TypeScript 支持的枚举不只能够默认从 0 开始,也能够赋值具体的字符串,它的操做空间很是大 |
类型推断 | 支持 | 无 | let x = 3; TypeScript 能够经过 3 来推断 x 的类型是 number |
高阶类型 | & typeof instanceof … | 无 | TypeScript 独有 |
Symbols | N | N | Symbol 同样 |
迭代器 | N | N | 若是实现了 Symbol.iterator ,那么就被视为可迭代的,术语上和 JavaScript 定义的同样 |
Generators | N | N | 同样 |
模块系统 | N | export import | 事实上 TypeScript 支持多种多样的模块系统,既有 ESModule 也有 Commonjs 规范,甚至还有 AMD UMD 等 |
其余 | N | N | 因为 TypeScript 是 JavaScript 的超集,所以 ES2016 以后以及 ESNext 定义的 api 均可以直接在 TypeScript 中使用 并不须要语言支持,至于其余一些好比 JSX Mixins 等等,因为这些不属于 JavaScript 标准所以这里再也不复述 。 |
咱们看下TypeScript
强大的类型检查 数组
虽然C#
和Typescript
都是微软主导的,并且都是大牛安德斯·海尔斯伯格(Anders Hejlsberg)领导开发的,他们之间有不少共同点,接下来我一个C#程序员的视角来理解Typescript
。
C# 值类型又细分为简单类型、枚举类型、结构类型和能够为 null 的值类型。 C# 引用类型又细分为类类型、接口类型、数组类型和委托类型。
对比项目 | TypeScript | C# | 说明 |
---|---|---|---|
数值 | number | int,long,float,double,byte,char,decimal等 | TypeScript和JavaScript同样,全部的数字都是浮点数,都是用number表示,这样也省了很了事,少了C#里相似long转int overflow问题。 |
布尔类型 | Boolean | Boolean | 基本同样 |
枚举 | enum | enum | javascript没有enum,这也是TypeScript为此做的补充。功能上和C#差很少; 目的都是为数值提供一个友好的名字,增长代码可读性和可重构性;C#的枚举值toString()会返回枚举的文本值,而TypeScript是数值 |
字符串 | String | String | 基本同样,不过TS支持用单引号 |
Symbol | Symbol | 无 | 用来看成惟一的标识,全部新建出来的Symbol都是不一样的,无论传进去的值是否同样。很是合适用来作KEY |
any | any | dynamic | 两者很类似,dynamic是FrameWork4.0的新特性,dynamic是FrameWork4.0的新特性,编译期默认dynamic对象支持你想要的任何特性 |
void | void | void | 相同,表示没有任何东西 |
null | null | null | 基本相同,注意,C#中值类型不能设置为null,必须给一个具体值 |
undefined | undefined | 无 | |
never | never | 无 | 是TypeScript引进的,我的以为是一种语义上的类型,用来表示永远不会获得返回值,好比while(true){}或throw new Error()之类。 |
Array | Array | Array | C#里数组能够用结合Linq 功能很强大,不过TS也能够用第三方库如lodash 来实现 |
元组 | 解构 | Tuple | 相似,C#老版的Tuple 有点鸡肋,不过载C#7.0已经更新了,TS解构也一样能实现 |
这篇文章介绍个人开发历程并介绍了从TypeScript
历史和与JavaScript
异同点以及C#
和TypeScript
的异同点,从若是你学过java,VB,C#,PHP同时有JavaScript
基础掌握就比较容易了,感谢兴趣的同窗赶忙上手试试吧。