安装
npm install -g typescript
编译代码
tsc greeter.ts
接口
interface Person {firstName: string;lastName: string;}function greeter(person: Person) {return "Hello, " + person.firstName + " " + person.lastName;}let user = { firstName: "Jane", lastName: "User" };document.body.innerHTML = greeter(user);
类
还要注意的是,在构造函数的参数上使用public等同于创建了同名的成员变量。
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;}let user = new Student("Jane", "M.", "User");document.body.innerHTML = greeter(user);
基本数据类型
布尔值
let isDone: boolean = false;
数字
let decLiteral: number = 6;let hexLiteral: number = 0xf00d;let binaryLiteral: number = 0b1010;let octalLiteral: number = 0o744;
字符串
JavaScript程序的另一项基本操作是处理网页或服务器端的文本数据。 像其它语言里一样,我们使用 string表示文本数据类型。 和JavaScript一样,可以使用双引号( ")或单引号(')表示字符串。
let name: string = "bob";name = "smith";
数组
TypeScript像JavaScript一样可以操作数组元素。 有两种方式可以定义数组。 第一种,可以在元素类型后面接上[],表示由此类型元素组成的一个数组:
let list: number[] = [1, 2, 3];
第二种方式是使用数组泛型,Array<元素类型>:
let list: Array<number> = [1, 2, 3];
元组 Tuple
元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。 比如,你可以定义一对值分别为string和number类型的元组。
// Declare a tuple typelet x: [string, number];// Initialize itx = ['hello', 10]; // OK// Initialize it incorrectlyx = [10, 'hello']; // Error
当访问一个越界的元素,会使用联合类型替代:
x[3] = 'world'; // OK, 字符串可以赋值给(string | number)类型console.log(x[5].toString()); // OK, 'string' 和 'number' 都有 toStringx[6] = true; // Error, 布尔不是(string | number)类型
枚举
enum Color {Red, Green, Blue}let c: Color = Color.Green;
Any
let notSure: any = 4;notSure = "maybe a string instead";notSure = false; // okay, definitely a boolean
Void
function warnUser(): void {console.log("This is my warning message");}
Never
// 返回never的函数必须存在无法达到的终点function error(message: string): never {throw new Error(message);}// 推断的返回值类型为neverfunction fail() {return error("Something failed");}// 返回never的函数必须存在无法达到的终点function infiniteLoop(): never {while (true) {}}
类型断言
let someValue: any = "this is a string";let strLength: number = (<string>someValue).length;
let someValue: any = "this is a string";let strLength: number = (someValue as string).length;
