写在前面
本系列来自 @东北大客 http://14ms.net/ 的翻译,虽然没有全部翻译,但是仍然帮我我这种初学者且英语苦手的大忙。
我在东北大客翻译的基础上改了改错别字和一些描述上的问题,算是一点优化。
原文链接为:http://www.typescriptlang.org/
1、安装typescript支持 。
有两种主要方法获得typescript工具:通过node.js的包管理(npm),或者安装VS2012的TypeScript插件。
对于VS 2013用户,点击一下链接:
Install TypeScript for Visual Studio 2013
对于NPM用户:
1
|
> npm install -g typescript
|
2、在编辑器(如webstrom)中新建greeter.ts文件,敲入一下代码:
1
2
3
4
5
6
7
|
function greeter(person) {
return “Hello, ” + person;
}
var user = “Jane User”;
document.body.innerHTML = greeter(user);
|
3、编译TypeScript文件
以上文件使用 .ts为扩展名,但实际代码仍为 javascript。可以直接拷贝粘贴至现有的Javascript 程序中。
在命令行里键入 如下命令,运行 TypeScript 编译器
注:当前目录为greeter.ts的目录。
请完成以上步骤1,即已经安装了typeScript支持。
1
|
> tsc greeter.ts
|
4、类型声明
结果是生成了一个带有相同代码的js文件。TypeScritpt 已经运行起来了。
接下来我们利用TypeScript提供的新工具进行一些改良。给greeter函数的person参数添加“:string”类型声明。
1
2
3
4
5
6
7
|
function greeter(person: string) {
return “Hello, ” + person;
}
var user = “Jane User”;
document.body.innerHTML = greeter(user);
|
5、变量控制
类型声明是一种控制函数变量期望的简单方法。在这里,我们期望给greeter函数传递一个字符串类型的产生。我们将传递进来的参数改成数组试一下:
1
2
3
4
5
6
7
|
function greeter(person: string) {
return “Hello, ” + person;
}
var user = [0, 1, 2];
document.body.innerHTML = greeter(user);
|
重新编译将会看到如下的错误:
1
|
greeter.ts(7,26): Supplied parameters do not match any signature of call target
|
6、接口
同样的,如果将调用greeter函数时不传入任何参数,TypeScript将会告诉你传入的参数个数不符。TypeScript提供根据私有声明和代码结构两种静态分析方法。
需要注意的是,以上仍然会建立greeter.js文件。尽管有错误仍然可以使用TypeScript,但TypeScript将会告知以上代码可能不会按照期望的方式运行。
接下来更进一步的改造我们的例子。我们使用接口interface来描述person对象,其包含名字和姓氏,即firstname和lastname。在TypeScript如果两个类型的内部结构兼容的话就会被兼容。这使得我们可以通过声明接口的形态即可实现接口,而不用详述一个接口的实现条款。
1
2
3
4
5
6
7
8
9
10
11
12
|
interface Person {
firstname: string;
lastname: string;
}
function greeter(person : Person) {
return “Hello, ” + person.firstname + ” ” + person.lastname;
}
var user = {firstname: “Jane”, lastname: “User”};
document.body.innerHTML = greeter(user);
|
7、类的声明和构造
最后我们扩展类class。TypeScript支持现在的ES6基于类的面向对象程序声明。
下面通过构造函数和几个公有域创建一个Student类,需要注意的是Person和Student可以同时声明,并交给程序正确的抽象出来。
需要注意的是,构造函数的public参数是一种帮助我们快速建立属性的速记方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
class Student {
fullname : string;
constructor(public firstname, public middleinitial, public lastname) {
this.fullname = firstname + ” ” + middleinitial + ” ” + lastname;
}
}
interface Person {
firstname: string;
lastname: string;
}
function greeter(person : Person) {
return “Hello, ” + person.firstname + ” ” + person.lastname;
}
var user = new Student(“Jane”, “M.”, “User”);
document.body.innerHTML = greeter(user);
|
8、添加HTML并运行
再运行一次 tsc greeter.js 我们发现生成的js 和以前我们写的代码相同。类class只是帮助我们建立基于OO的原型的方法。
下面添加 greeter.html 并在浏览器里打开就可以看见最终效果了。
1
2
3
4
5
6
7
|
<!DOCTYPE html>
<html>
<head><title>TypeScript Greeter</title></head>
<body>
<script src=”greeter.js”></script>
</body>
</html>
|