浅谈 C#、Typescript、JavaScript

C#,TS,JS

之前作后端的时候主要是微软的项目为主,随着公司业务发展须要后来转向偏前端项目的开发,今天我到了聊聊微软主导的TypeScript,如你使用过C#或Visual Basic .NET等语言,你会很熟悉。javascript

Typescript 来历

在微软强大的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 介绍

TypeScriptJavaScript 的超集,所以任何 JavaScript 都是合法的 TypeScript(很是像 C 和 Objective-C 的关系),TypeScript结合了类型检查和静态分析,显式接口。TypeScript是微软的开源项目,它是由C#之父安德斯·海尔斯伯格(Anders Hejlsberg)发起的。git

Typescript作了些什么?

JavaScript 只是一个脚本语言,并不是真正设计用于开发大型 Web 应用,JavaScript 没有提供类和模块等概念,对于一个真正的应用开发,TypeScript 扩展JavaScript 并实现了这些特性。程序员

TypeScript主要特色包括:typescript

  • 微软推出的开源语言,使用 Apache 受权协议
  • 增长了静态类型、类、模块、接口和类型注解
  • 能够编译成可读的、标准的 JavaScript
  • 支持开发大规模 JavaScript 应用,支持全部浏览器,主机和操做系统
  • 可用于开发大型应用,并保证编译后的JavaScript代码兼容性
  • 易学和易于理解

Typescript与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 异同点

虽然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基础掌握就比较容易了,感谢兴趣的同窗赶忙上手试试吧。

参考资料

C# TypeScript官方 TypeScript Handbook

相关文章
相关标签/搜索