zoukankan      html  css  js  c++  java
  • 使用TypeScript开发程序

    简介

    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之后新增了。

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

  • 相关阅读:
    匿名方法、Lambda表达式、Func<>委托
    日期相关
    6个重要的概念:栈,堆,值类型,引用类型,装箱,拆箱
    linux 命令行cd dvd iso操作
    wkhtmltopdf错误解决办法
    lxml包引入错误
    安装python-ldap fatal error: lber.h: No such file or directory
    用pyenv和virtualenv搭建单机多版本python虚拟开发环境
    在Ubuntu上安装pyenv 相关问题Common build problems
    在Ubuntu上安装pyenv
  • 原文地址:https://www.cnblogs.com/tansm/p/3370615.html
Copyright © 2011-2022 走看看