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 相关文章推荐
图像替换新技术 状态域方法
Jan 28 Javascript
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
Sep 26 Javascript
在jQuery中 常用的选择器介绍
Apr 16 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
Mar 21 Javascript
javascript冒泡排序小结
Apr 10 Javascript
jQuery简单实现点击文本框复制内容到剪贴板上的方法
Aug 01 Javascript
javascript中json对象json数组json字符串互转及取值方法
Apr 19 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
Mar 28 Javascript
Vue作用域插槽slot-scope实例代码
Sep 05 Javascript
Vue.js 实现数据展示全部和收起功能
Sep 05 Javascript
JavaScript实现切换多张图片
Jan 27 Javascript
使用PDF.js渲染canvas实现预览pdf的效果示例
Apr 17 Javascript
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
BBS(php &amp; mysql)完整版(七)
2006/10/09 PHP
dedecms中显示数字验证码的修改方法
2007/03/21 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
2014/11/08 PHP
php无限极分类递归排序实现方法
2014/11/11 PHP
PHP的PDO操作简单示例
2016/03/30 PHP
Yii2中多表关联查询hasOne hasMany的方法
2017/02/15 PHP
javascript实现的listview效果
2007/04/28 Javascript
Wordpress ThickBox 点击图片显示下一张图的修改方法
2010/12/11 Javascript
非常棒的10款jQuery 幻灯片插件
2011/06/14 Javascript
Jquery 一次处理多个ajax请求的代码
2011/09/02 Javascript
js获取dom的高度和宽度(可见区域及部分等等)
2013/06/13 Javascript
Extjs4 Treegrid 使用心得分享(经验篇)
2013/07/01 Javascript
jquery 新建的元素事件绑定问题解决方案
2014/06/12 Javascript
分享12个实用的jQuery代码片段
2016/03/09 Javascript
Bootstrap布局之栅格系统详解
2016/06/13 Javascript
javascript汉字拼音互转的简单实例
2016/10/09 Javascript
JS实现表单验证功能(验证手机号是否存在,验证码倒计时)
2016/10/11 Javascript
如何获取元素的最终background-color
2017/02/06 Javascript
Angular js 实现添加用户、修改密码、敏感字、下拉菜单的综合操作方法
2017/10/24 Javascript
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python的lambda匿名函数的简单介绍
2013/04/25 Python
Django高级编程之自定义Field实现多语言
2019/07/02 Python
python采集百度搜索结果带有特定URL的链接代码实例
2019/08/30 Python
pandas数据处理进阶详解
2019/10/11 Python
Pytorch模型转onnx模型实例
2020/01/15 Python
python时间日期操作方法实例小结
2020/02/06 Python
Python爬虫scrapy框架Cookie池(微博Cookie池)的使用
2021/01/13 Python
下列程序在32位linux或unix中的结果是什么
2014/03/25 面试题
laravel使用redis队列实例讲解
2021/03/23 PHP
学校门卫工作职责
2013/12/07 职场文书
商场开业庆典策划方案
2014/06/02 职场文书
教师竞聘上岗演讲稿
2014/09/03 职场文书
2014年大学班级工作总结
2014/11/14 职场文书
2014年售后服务工作总结
2014/11/18 职场文书
2014年学校财务工作总结
2014/12/06 职场文书
Windows Server 2019 配置远程控制以及管理方法
2022/04/28 Servers