c#程序员对TypeScript的认识过程


Posted in Javascript onJune 19, 2015

简介

TypeScript一直发展不错,我们公司在开发新功能时,考虑到程序的可维护性,使用了TypeScript编写浏览器上的程序,我们是从零开始使用TypeScript,甚至我连javascript也是半罐子,本文描述了一个c#程序员认识TypeScript的过程。

注:本文编写是基于Typescript0.8版本,而且初用,可能过时,具体规范可以参考http://www.typescriptlang.org

命名空间和类

作为面向对象的开发人员思维,第一个想到的是TypeScript如何定义类,由于正好我们项目服务端(C#)的原理和客户端(TypeScript)原理完全相同,所以这里正好用C#与TypeScript对比。

C#声明类

using System;
namespace Digiwin.Mars.VirtualUI.Engine {
internal sealed class Decoder {}
}

TypeScript声明类

///<reference path="../Collections/ICollection.ts" />
module System.Erp.VirtualUI.Engine {
export class Decoder {}
}

首先简单来说,都有类似命名空间的概念,一个叫namespace,一个叫module,这个就不废话了。

其次,c#要引用其他的类,首先你需要在工程文件中引用dll,然后在文件头上using一个命名空间(可选),但是在TypeScript中,没有这个概念,直接引用一个文件的。

C#里类可以public、internal等等很多级别,还有sealed等修饰符,TypeScript你就忘记这些吧,加入export相当于public,抽象,值类型什么的,这个好像没有。

但是接口是有的。

方法和注释

C#的方法

/// <summary>
    ///  解码变更集
    /// </summary>
    /// <param name="reader"> 一个变更集读取器对象 </param>
    public void DecodeChangeSet(ChangeRecordReader reader) {
      //解码上下文对象
      var ctx = new DecodeContext();

TypeScript声明方法

/**
     * 传入变更集,将其解码到当前的对象容器。
     * @param {System.Erp.VirtualUI.Engine.IChangeRecordReader} reader - 提供记录集。
     */

    public Decode(reader: IChangeRecordReader): void {
      //解码上下文对象
      var ctx = new DecodeContext();

我们首先看到c#的xml 文档专用注释也是支持的,不同他使用JsDoc的规范。

普通的注释也使用// ,这个完全和javascript相同。

在方法的声明上,TypeScript将返回参数放在后面,对应的,参数的类型也是放在名字后面,如果你声明变量,也是这样的

private _maxId: number; //在类上定义字段

var item: VirtualObject; //在方法里定义变量。

在方法的可访问性上,支持public,这样就可以公开还是不公开。

参数和构造

在C#里面,我们经常同一个名字定义多个方法,使用不同的参数类型区分,但是在javascript中不允许,所以TypeScript也不允许。

由于上面的原因,你也就能理解只能有一个构造函数。下面是他的构造函数例子:

constructor(

      objectContainer: VirtualObjectContainer,

      objectBinder:IObjectBinder

    ) {

      this._objectContainer = objectContainer;

      this._binder = objectBinder;

    }

基于javascript的概念,也就没有ref out in这样的关键字,但有命名方式访问参数和可选参数。

我也没有发现override关键字,虽然据说0.8之后新增了。

好了,更多的细节需要你慢慢研究规范文档了,这篇文档可以帮助你入门,使用愉快。

以上所述就是本文的全部内容了,希望大家能够喜欢。

Javascript 相关文章推荐
动态加载iframe
Jun 16 Javascript
jquery 中多条件选择器,相对选择器,层次选择器的区别
Jul 03 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
Sep 19 Javascript
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
Nov 03 Javascript
javascript实时显示北京时间的方法
Mar 12 Javascript
改变checkbox默认选中状态及取值的实现代码
May 26 Javascript
bootstrap的3级菜单样式,支持母版页保留打开状态实现方法
Nov 10 Javascript
Vue.2.0.5过渡效果使用技巧
Mar 16 Javascript
Angularjs根据json文件动态生成路由状态的实现方法
Apr 17 Javascript
Vue框架中正确引入JS库的方法介绍
Jul 30 Javascript
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
May 22 Javascript
vue+elementui通用弹窗的实现(新增+编辑)
Jan 07 Vue.js
JavaScript和JQuery的鼠标mouse事件冒泡处理
Jun 19 #Javascript
TypeScript 中接口详解
Jun 19 #Javascript
TypeScript 学习笔记之基本类型
Jun 19 #Javascript
使用Chrome浏览器调试AngularJS应用的方法
Jun 18 #Javascript
使用AngularJS创建自定义的过滤器的方法
Jun 18 #Javascript
深入讲解AngularJS中的自定义指令的使用
Jun 18 #Javascript
3个可以改善用户体验的AngularJS指令介绍
Jun 18 #Javascript
You might like
php与paypal整合方法
2010/11/28 PHP
Windows7下的php环境配置教程
2015/02/28 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
2016/10/08 PHP
js 替换
2008/02/19 Javascript
js/jquery解析json和数组格式的方法详解
2014/01/09 Javascript
jquery预览图片实现鼠标放上去显示实际大小
2014/01/16 Javascript
IE6 hack for js 集锦
2014/09/23 Javascript
Jquery代码实现图片轮播效果(一)
2015/08/12 Javascript
JS正则表达式比较常见用法
2016/01/26 Javascript
javascript 通过键名获取键盘的keyCode方法
2017/12/31 Javascript
mint-ui在vue中的使用示例
2018/04/05 Javascript
vue-cli 引入jQuery,Bootstrap,popper的方法
2018/09/03 jQuery
Vue项目引进ElementUI组件的方法
2018/11/11 Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
2019/08/23 Javascript
Vue中this.$nextTick的作用及用法
2020/02/04 Javascript
js实现轮播图效果 纯js实现图片自动切换
2020/08/09 Javascript
vue-cli+webpack项目打包到服务器后,ttf字体找不到的解决操作
2020/08/28 Javascript
[01:08]DOTA2“血战之命”预告片
2017/08/12 DOTA
python之文件读取一行一行的方法
2018/07/12 Python
Python实现判断一个整数是否为回文数算法示例
2019/03/02 Python
Django框架HttpRequest对象用法实例分析
2019/11/01 Python
Python使用grequests并发发送请求的示例
2020/11/05 Python
python爬虫中url管理器去重操作实例
2020/11/30 Python
css3动画事件—webkitAnimationEnd与计时器time事件
2013/01/31 HTML / CSS
LookFantastic丹麦:英国美容护肤精品在线商城
2016/08/18 全球购物
加拿大时装零售商:Influence U
2018/12/22 全球购物
聚网科技C++面试笔试题
2015/09/01 面试题
两道JAVA笔试题
2016/09/14 面试题
工程造价自荐信
2013/10/09 职场文书
幼儿园大班新学期寄语
2014/01/18 职场文书
护士毕业自我鉴定
2014/02/07 职场文书
《动手做做看》教学反思
2014/04/09 职场文书
科技节口号
2014/06/19 职场文书
学校领导班子四风问题整改意见
2014/10/02 职场文书
手机被没收的检讨书
2014/10/04 职场文书
zabbix监控mysql的实例方法
2021/06/02 MySQL