TypeScript 是 JavaScript 的一个超集,支持 ECMAScript 6 标准。
TypeScript 由微软开发的自由和开源的编程语言。
TypeScript 设计目标是开发大型应用,它可以编译成纯 JavaScript,编译出来的 JavaScript 可以运行在任何浏览器上。
以下功能是从 ECMA 2015 反向移植而来:
TypeScript 可以使用 JavaScript 中的所有代码和编码概念,TypeScript 是为了使 JavaScript 的开发变得更加容易而创建的。例如,TypeScript 使用类型和接口等概念来描述正在使用的数据,这使开发人员能够快速检测错误并调试应用程序
参数作用--help显示帮助信息--module载入扩展模块--target设置 ECMA 版本--declaration额外生成一个 .d.ts 扩展名的文件。tsc ts-hw.ts --declaration ,以上命令会生成 ts-hw.d.ts、ts-hw.js 两个文件。--removeComments删除文件的注释--out编译多个文件并合并到一个输出的文件--sourcemap生成一个 sourcemap (.map) 文件。sourcemap 是一个存储源代码与编译代码对应位置映射的信息文件。--module noImplicitAny在表达式和声明上有隐含的 any 类型时报错--watch在监视模式下运行编译器。会监视输出文件,在它们改变时重新编译。
any、number、string、boolean、数组、元组、枚举、void、null、undefined、never
var sites = {
site1: "Runoob",
site2: "Google",
sayHello: function () { } // 类型模板
};
sites.sayHello = function () {
console.log("hello " + sites.site1);
};
sites.sayHello();
类型断言可以用来手动指定一个值的类型,即允许变量从一种类型更改为另一种类型。 语法:<类型>值 或 值 as 类型 eg: let str = '1' let str:number = <number><any> str
当类型没有给出时,TypeScript 编译器利用类型推断来推断类型。 如果由于缺乏声明而不能推断出类型,那么它的类型被视作默认的动态 any 类型。
function function_name():return_type {}
function func_name(param1 [:datatype], param2 [:datatype]) {}
可选参数使用问号标识,位于变量名后面 eg: str?
有一种情况,我们不知道要向函数传入多少个参数,这时候我们就可以使用剩余参数来定义。 剩余参数语法允许我们将一个不确定数量的参数作为一个数组传入。 eg: function buildName(firstname: string, ...restName: string[]) {}
我们知道数组中元素的数据类型都是相同的,如果存储的元素数据类型不同,则需要使用元组。 元组中允许存储不同类型的元素,元组可以作为参数传递给函数。
接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具 体的方法。接口可单继承、多继承。
eg: interface IPerson {
firstName: string,
lastName: string,
sayHi: ()=>string
}
let customer:IPerson = {
firstName: 'Tom',
lastName: 'Hanks',
sayHi: ():string => {return 'Hi there'}
}
TypeScript 是面向对象的 JavaScript。 类描述了所创建的对象共同的属性和方法。 TypeScript 支持面向对象的所有特性,比如 类、接口等。 访问控制修饰符:TypeScript 中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。TypeScript 支持 3 种不同的访问权限。 public(默认) : 公有,可以在任何地方被访问。 protected : 受保护,可以被其自身以及其子类和父类访问。 private : 私有,只能被其定义所在的类访问。 类可以实现接口,使用关键字 implements,并将 interest 字段作为类的属性使用。
interface IPoint {
x:number
y:number
}
function addPoints(p1:IPoint,p2:IPoint):IPoint {
var x = p1.x + p2.x
var y = p1.y + p2.y
return {x:x,y:y}
}
// 正确
var newPoint = addPoints({x:3,y:4},{x:5,y:1})
// 错误
var newPoint2 = addPoints({x:1},{x:4,y:3})
命名空间一个最明确的目的就是解决重名问题
namespace SomeNameSpaceName {
export interface ISomeInterfaceName { }
export class SomeClassName { }
}
let obj = new SomeNameSpaceName.SomeClassName()
如果一个命名空间在一个单独的 TypeScript 文件中,则应使用三斜杠 /// 引用它,语法:
/// <reference path = "SomeFileName.ts" />
我们需要使用 declare 关键字来定义它的类型,帮助 TypeScript 判断我们传入的参数类型对不对:
declare var jQuery: (selector: string) => any;
jQuery('#foo');