簡介
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之後新增了。
好了,更多的細節需要你慢慢研究規範文檔了,這篇文檔可以幫助你入門,使用愉快。