1、安装nodejs和vscode:

nodejs : https://nodejs.org/en/

Visual Studio Code :  https://www.visualstudio.com/en-us/products/code-vs.aspx

安装是很简单的,一路next就行,此处不详细描述。

检验node是否安装成功,打开命令行,输入node -v, 显示如下图,说明安装成功。

PS: TypeScript毕竟是微软发明的,用微软的编辑器更省心,当然不是必须的,否则得根据你的编辑器找typescript插件,你懂的。

2、上面的步骤完成后,安装typescript,找开命令行,输入指令:npm install -g typescript

安装完成,命令行输入tsc -v进行检验,显示版本号说明安装成功,如下图

 3、完成了typescript环境的配置,接下来我们可以开始写代码了。

新建一个文件夹demo, 在它下面创建oop.ts

oop.ts代码如下:

/**
* 声明抽象类Shape
* */
abstract class Shape {
//声明受保护的属性edge, 是的,你没看错,protected只能用于父类和子类
protected edge: number;
//声明构造函数,入参类型为number
constructor(edge: number) {
this.edge = edge;
}
//声明类实例方法,方法名后面的number是限制方法的返回类型
getEdge(): number {
return this.edge;
}
//声明抽象方法
abstract getArea(): number;
} /**
* 声明类Triangle, 继承自抽象类Shape,必须实现抽象方法getArea()
* */
class Triangle extends Shape {
//声明类私有属性,其他类不能访问,包括父类
private width: number;
private height: number; //声明构造函数,必须显式调用父类构造函数,用super()
constructor(width: number, height: number) {
super(3);
this.width = width;
this.height = height;
} //实例方法,重写父类同名方法
getArea(): number {
return this.width * this.height / 2;
}
} /**
* 声明类Rectangle, 继承自抽象类Shape,必须实现抽象方法getArea()
* */
class Rectangle extends Shape {
//声明类私有属性,其他类不能访问,包括父类
private width: number;
private height: number; //声明构造函数,必须显式调用父类构造函数,用super()
constructor(width: number, height: number) {
super(4);
this.width = width;
this.height = height;
} //实例方法,重写父类同名方法
getArea(): number {
return this.width * this.height;
}
} //模拟入参数类型限制为Shape抽象类实例
function outputShape(shape: Shape) {
console.log(shape.getEdge());
console.log(shape.getArea());
} //模拟程序主入口函数
function main() {
outputShape(new Triangle(4, 5));
outputShape(new Rectangle(4, 5));
} main();

4.选中oop.ts文件, 右键选择“在命令提示符中打开”

在命令行中,输入tsc oop.ts,执行后会在相同目录下生成oop.js文件

oop.js文件内容如下:

var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
/**
* 声明抽象类Shape
* */
var Shape = (function () {
//声明构造函数,入参类型为number
function Shape(edge) {
this.edge = edge;
}
//声明类实例方法,方法名后面的number是限制方法的返回类型
Shape.prototype.getEdge = function () {
return this.edge;
};
return Shape;
}());
/**
* 声明类Triangle, 继承自抽象类Shape,必须实现抽象方法getArea()
* */
var Triangle = (function (_super) {
__extends(Triangle, _super);
//声明构造函数,必须显式调用父类构造函数,用super()
function Triangle(width, height) {
_super.call(this, 3);
this.width = width;
this.height = height;
}
//实例方法,重写父类同名方法
Triangle.prototype.getArea = function () {
return this.width * this.height / 2;
};
return Triangle;
}(Shape));
/**
* 声明类Rectangle, 继承自抽象类Shape,必须实现抽象方法getArea()
* */
var Rectangle = (function (_super) {
__extends(Rectangle, _super);
//声明构造函数,必须显式调用父类构造函数,用super()
function Rectangle(width, height) {
_super.call(this, 4);
this.width = width;
this.height = height;
}
//实例方法,重写父类同名方法
Rectangle.prototype.getArea = function () {
return this.width * this.height;
};
return Rectangle;
}(Shape));
//模拟入参数类型限制为Shape抽象类实例
function outputShape(shape) {
console.log(shape.getEdge());
console.log(shape.getArea());
}
//模拟程序主入口函数
function main() {
outputShape(new Triangle(4, 5));
outputShape(new Rectangle(4, 5));
}
main();

5.执行oop.js文件,校验结果是否正确,在命令行中输入node oop.js

输出如下内容,说明执行成功:

最后,可见TypeScript的语法已经很接近Java或C#了,而且它最主要的就是实现了编译时类型检查,还有类,抽象类,接口,泛型等OOP的实现, 这对Java或C#的开发者而言,学习成本一下就降低了。

看了上面的TypeScript语法,你会发现变量声明是这样的:edge : number, 为什么不搞成number edge呢?不然不是更象Java或C#了?

个人觉得原因可能是因为Dart,因为它就是这样声明变量的,如果TypeScript也这样实现的,语法上跟Dart太接近了,恐怕就得被谷歌告了吧。

PS: typescript只是个js预编译器,如果你想象Java或C#等静态语言一样写js代码,或许它是你不错的选择,否则你还是可以选CoffeeScript等其他js预编译器。

TypeScript之面向对象初体验的更多相关文章

  1. TypeScript札记:初体验

    1.简介 TypeScript 是一种由微软开发的自由和开源的编程语言.它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程. TypeScript是一种 ...

  2. python_92_面向对象初体验

    class dog: def __init__(self,name): self.name=name def bulk(self): print('%s汪汪汪!'%self.name) d1=dog( ...

  3. Scala 深入浅出实战经典 第66讲:Scala并发编程实战初体验

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  4. node.js 初体验

    node.js 初体验 2011-10-31 22:56 by 聂微东, 174545 阅读, 118 评论, 收藏, 编辑 PS: ~ 此篇文章的进阶内容在为<Nodejs初阶之express ...

  5. PHP初体验

    PHP初体验 提笔写初体验总不知道从何说起,直接聊PHP中的函数.PHP网络技术.数据库操作.PHP模板等感觉又不是初体验.最后还是决定从PHP的面向对象.PHP的魔术方法.PHP的反射.PHP中的异 ...

  6. junit4初体验

    OK,现在我们正式开始junit4系列的整理.前面的junit38作为4的补充知道就好了,实际编码中我们以4为主.这里先来一把junit的初体验,同时也让我们来一步一步的了解下TDD的好处. ORM大 ...

  7. SSH初体验系列--Hibernate--2--crud操作

    Ok,今天比较详细的学习一下hibernate的C(create).R(read).U(update).D(delete) 相关api... 前言 Session: 是Hibernate持久化操作的基 ...

  8. Linux内核驱动学习(三)字符型设备驱动之初体验

    Linux字符型设备驱动之初体验 文章目录 Linux字符型设备驱动之初体验 前言 框架 字符型设备 程序实现 cdev kobj owner file_operations dev_t 设备注册过程 ...

  9. go语言的初体验

    分享最近学习 Go 语言的心得和体会,适合有编程基础的人,因为这里只做经验性的总结概述,不做基础教学的入门知识讲解,如果想要学习编程语言的基础知识,请出门左转进入官方文档,查看基础教学文档. Go 概 ...

随机推荐

  1. [开发笔记]GCC 分支预测优化

    #define likely(x) __builtin_expect(!!(x),1)#define unlikely(x) __builtin_expect(!!(x),0) 用于优化在做分支判断的 ...

  2. mount报错: you must specify the filesystem type

    在linux mount /dev/vdb 到 /home 分区时报错: # mount /dev/vdb /homemount: you must specify the filesystem ty ...

  3. BZOJ 3626: [LNOI2014]LCA [树链剖分 离线|主席树]

    3626: [LNOI2014]LCA Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2050  Solved: 817[Submit][Status ...

  4. win7,M​i​n​d​m​a​n​a​g​e​r​2​0​1​2使用模板时弹出Runtime error R6025解决方法

    Mindjet.MindManager2012.v10.0在应用个别模板时提示"参数错误",然后自动关闭. 解决办法: 如果是win7系统,可以进入C:\Users\(用户名)\A ...

  5. Mono 3.2.7发布,JIT和GC进一步改进

    Mono 3.2.7已经发布,带来了很多新特性,如改进的JIT.新的面向LINQ的解释器以及使用了64位原生指令等等. 这是一次主要特性发布,累积了大约5个月的开发工作.看上去大部分改进都是底层的性能 ...

  6. Xamarin.Android之Fragment Walkthrough

    利用Fragment设计能够兼容不同屏幕的应用 这里我们先围观下最后的成果图,给读者打打气: 普通手机上显示的结果: 在平板上显示的结果: 笔者要郑重声明下,虽然看似是两种不同的显示效果,但是同一个应 ...

  7. 深入浅出聊优化:从Draw Calls到GC

    前言: 刚开始写这篇文章的时候选了一个很土的题目...<Unity3D优化全解析>.因为这是一篇临时起意才写的文章,而且陈述的都是既有的事实,因而给自己“文(dou)学(bi)”加工留下的 ...

  8. 【腾讯Bugly干货分享】微信终端跨平台组件 mars 系列(二) - 信令传输超时设计

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/9DJxipJaaBC8yC-buHgnTQ 作者简介: ...

  9. 使用 GCC 和 GNU Binutils 编写能在 x86 实模式运行的 16 位代码

    不可否认,这次的标题有点长.之所以把标题写得这么详细,主要是为了搜索引擎能够准确地把确实需要了解 GCC 生成 16 位实模式代码方法的朋友带到我的博客.先说一下背景,编写能在 x86 实模式下运行的 ...

  10. Hbase学习笔记01

    最近做项目接触到了HDFS.mapreduce以及Hbase,有了实战机会,今天打算将这些知识好好总结下,以备不时之需.首先从Hbase开始吧. Hbase是建立在HDFS上的分布式数据库,下图是Hb ...