TypeScript笔记

3.手册

3.1 基础类型

布尔值

1
let isDone: boolean = false;

数字

1
let decLiteral: number = 6;    
2
let hexLiteral: number = 0xf00d;      
3
let binaryLiteral: number = 0b1010;   
4
let octalLiteral:number = 0o744;

字符串

1
let name: string = "bob";
2
name = "smith";

模板字符串(使用``符号,使用${ expr }引用变量)

let nameStr: string = Gene;
let age: number = 37;
let sentence: string = `Hello, my name is ${ nameStr }.

I’ll be ${ age + 1} years old next month.`;
console.log(nameStr);
console.log(age);
console.log(sentence);

数组

第一种,可以在元素类型后面接上[],表示由此类型元素组成的一个数组:

1
let list: number[] = [1,2,3];

第二种方式是使用数组泛型,Array<元素类型>:

1
let list: Array<number> = [1,2,3];

元组(Tuple)

元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。 比如,你可以定义一对值分别为string和number类型的元组。
// Declare a tuple type
let x: [string, number];
// Initialize it
x = [‘hello’, 10]; // OK
// Initialize it incorrectly
x = [10, ‘hello’]; // Error

console.log(x[0].substr(1)); // OK
console.log(x[1].substr(1)); // Error, ‘number’ does not have ‘substr’

当访问一个越界的元素,会使用联合类型替代:
x[3] = ‘world’; // OK, 字符串可以赋值给(string | number)类型

console.log(x[5].toString()); // OK, ‘string’ 和 ‘number’ 都有 toString

x[6] = true; // Error, 布尔不是(string | number)类型

枚举

举类型可以为一组数值赋予友好的名字。
//默认从0开始编号
enum Color {Red, Green, Blue}
let c: Color = Color.Green;
//改为从1开始编号
enum Color {Red = 1, Green, Blue}
let c: Color = Color.Green;
//全部采用手动编号
enum Color {Red = 1, Green = 2, Blue = 4}
let c: Color = Color.Green;
//可以由值找到名字,可以由名字找到编号
enum Color {Red = 1, Green, Blue}
let colorName: string = Color[2];
alert(colorName);

任意值(any)

可以动态地为它赋值:
let notSure: any = 4;
notSure = “maybe a string instead”;
notSure = false; // okay, definitely a boolean

与Object类型,但Object只允许你为它赋值,却不能够在它上面调用方法,any是可以在它上面调用方法的。
et notSure: any = 4;
notSure.ifItExists(); // okay, ifItExists might exist at runtime
notSure.toFixed(); // okay, toFixed exists (but the compiler doesn’t check)

let prettySure: Object = 4;
prettySure.toFixed(); // Error: Property ‘toFixed’ doesn’t exist on type ‘Object’.

只知道一部分数据的类型时,any类型也是有用的。
let list: any[] = [1, true, “free”];
list[1] = 100;

空值

某种程度上来说,void类型像是与any类型相反,它表示没有任何类型。 当一个函数没有返回值时,你通常会见到其返回值类型是void:
function warnUser(): void {
alert(“This is my warning message”);
}

声明一个void类型的变量没有什么大用,因为你只能为它赋予 undefined和null:
let unusable: void = undefined;

Null 和 Undefined

let u: undefined = undefined;
let n: null = null;

never类型表示的是那些永不存在的值的类型。

// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
throw new Error(message);
}

// 推断的返回值类型为never
function fail() {
return error(“Something failed”);
}

// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {
while (true) {
}

类型断言

其一是“尖括号”语法:
let someValue: any = “this is a string”;
let strLength: number = (someValue).length;

另一个为as语法:
let someValue: any = “this is a string”;
let strLength: number = (someValue as string).length;

两种形式是等价的。 至于使用哪个大多数情况下是凭个人喜好;然而,当你在TypeScript里使用JSX时,只有as语法断言是被允许的。

3.2 变量声明

let声明

const是对let的一个增强,它能阻止对一个变量再次赋值。

拥有块级作用域的变量的另一个特点是,它们不能在被声明之前读或写。

重定义及屏蔽

const 声明

3.3 接口

在TypeScript里,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约。