TypeScript入门教程
来源:互联网 发布:荣誉证书在线制作软件 编辑:程序博客网 时间:2024/06/08 10:07
TypeScript扩展了JavaScript的语法,所以任何现有的JavaScript程序可以不加改变的在TypeScript下工作。TypeScript是为大型应用之开发而设计,而编译时它产生 JavaScript 以确保兼容性。
关于调试
以下代码均在http://www.typescriptlang.org/play/index.html上运行通过。
自动拆分字符串
function test(template, name, age) { console.log(template); console.log(name); console.log(age);}var myName = "zx";var getAge = () => 20;//可以这样调用test函数test`Hello, my name is ${myName}, I am ${getAge()} years old`;
编译后的javascript代码
function test(template, name, age) { console.log(template); console.log(name); console.log(age);}var myName = "zx";var getAge = function () { return 20; };//可以这样调用test函数(_a = ["Hello, my name is ", ", I am ", " years old"], _a.raw = ["Hello, my name is ", ", I am ", " years old"], test(_a, myName, getAge()));var _a;
参数类型
声明变量时指定类型
var myName: string = 'zx';console.log(typeof myName); // stringmyName = 20; // 报错,因为已经声明为string类型
常见的数据类型:
- Boolean:布尔类型- Number:TypeScript所有的数值类型采用浮点型计数- String:字符串类型- Array:数组- Enum:枚举- Any:任何类型,可以用来跳过TypeScript的编译时类型的检查- void:表明函数无返回值
自定义类型
class Person { name: string; age: number;}var people: Person = new Person();console.log(zx); // Person
编译后的javascript代码
var Person = (function () { function Person() { } return Person;}());var zx = new Person('zx', 10);console.log(zx);
给参数指定默认值
function test(a: string = 'zx') { console.log(a);}test(); // zxtest('xz'); // xz
编译后的javascript代码
function test(a) { if (a === void 0) { a = 'zx'; } console.log(a);}test();test('xz');
可选参数
function test(a: string, b?:string) { console.log(a); console.log(b);}
参数b的后面有个?,这就声明了b是可选的。
Rest and Spread 操作符
function test(...args) { console.log(args);}test(1, 2, 3); // 控制台输出Array(4)
注意控制台输出Array(4),这说明 …args 是真正的数组,而不是类似数组的对象。
(可以用 Array.form() 转换类似数组的对象)
generator函数
示例
function* log() { console.log(1); yield console.log(2); console.log(3); console.log(4); yield console.log(5); console.log(6);}let fun = log();fun.next(); // 1 2fun.next(); // 3 4 5fun.next(); // 6
通过示例应该可以看出:
- 用 function* 声明一个generator函数
- 在其内的代码以 yield 为一个断点
- 调用 generator 函数需要使用一个辅助变量,并通过 next() 来执行一次(到断点即停)
意义
关于这种函数的意义当然是用经典的股票来说明:
function* getLowerPrice() { while (true) { yield Math.ceil(Math.random() * 100); }}let test = getLowerPrice(), price = 100, targetPrice = 20;while (price > targetPrice) { price = test.next().value;}console.log("Oh, yeah! I get the lowest price ", price);
你会看到输出一个比20小的数字,这就是意义?
循环
let arr = [2, 4, 6, 8];arr.desc = '我还是数组?';// forEacharr.forEach(x => x > 2 ? console.log(x) : null); // 4 6 8// for in for (let index in arr) { console.log(index); }// 输出 0 1 2 3 desc (显然 forin 是循环获取下标,但是desc?)// for of for (let item of arr) { console.log(item);}// 输出 2 4 6 8 (没有desc)
从上面可以看出一个 forin 的弊端(也许不是),它打印出了 desc (显然不是数组下标)。
泛型
举个例子:
let people: Array<Person> = [];
这就声明了一个数组,该数组只能存放Person类型数据。
类
声明一个类
class Person { name; age: number = 20; getAge () { console.log(this.age); }}let zx = new Person();zx.getAge(); // 20
属性修饰符
与java类似:
- public- protect- private
构造函数
统一为:
constructor () {}
举个例子:
class Person { private name: string; private age: number; constructor (name, age) { this.name = name; this.age = age; } log () { console.log(this.name); console.log(this.age); }}let zx = new Person('zx', 20);zx.log(); // zx 20let txj = new Person('txj', 13);txj.log(); // txj 13
继承
自然是关键字 extends
。
举个例子:
class Father { private name: string; private age: number; constructor(name, age) { this.name = name; this.age = age; } log () { console.log(this.name); console.log(this.age); }}class Son extends Father { private privateMoney: number; constructor(name, age, privateMoney) { super(name, age); this.privateMoney = privateMoney; } showOff() { console.log("You do not know my private money! ", this.privateMoney); }}let txj = new Father('txj', 13);txj.log();let zx = new Son('zx', 20, 10);zx.log();zx.showOff();
可以看到子类拥有父类的属性和方法,但是父类就不能拥有子类自己的方法。
接口
关键字 interface
。
举个例子:
interface Human { sex: string;}class Person { name: string; constructor (public sex : Human, name) { this.sex = sex; this.name = name; }}let zx = new Person({sex : 'male'}, 'zx');
这就硬性规定了应传入的参数。
当然也可规定必须实现的方法:
interface Animal { eat();}class Dog implements Animal { eat () { console.log('I am eating'); }}
- TypeScript入门教程
- TypeScript入门教程
- 《TypeScript 中文入门教程》
- 转载:《TypeScript 中文入门教程》
- typescript
- TypeScript
- typeScript
- typescript
- TypeScript
- TypeScript
- typescript
- TypeScript
- TypeScript
- TypeScript
- TypeScript
- TypeScript
- TypeScript
- TypeScript
- 566D
- 【总结】Android Fragment MVC思路
- Ajax+SpringMVC+JSON登录验证
- 数据库学习|学生代码笔记---002
- 【总结】学习车牌识别matlab源码
- TypeScript入门教程
- 第一个Hello Django(二)
- git 常用命令
- Java常用类之Math类、File类
- 关于Mybatis中#{}和${}的区别
- python学习日记(四)
- phpstrom
- 关于springmvc常用的注解标签详解
- DP