TypeScript学习笔记-基础类型

基础类型

布尔值

1
let isDone: boolean = false;

数字

和 Javascript 一样,TypeScript里所有数字为浮点数,类型为 number 。除了支持十进制和十六进制字面量,TypeScript还支持 ECMAScript 2015中引入的二进制和八进制字面量。

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

字符串

1
2
3
4
5
let name: string = 'Tom';
let age: number = 10;
let sentence: string = `Hello, my name is ${name}
I'll be ${age + 1} years old next month.`;

数组

TypeScript 有两种方式定义数组:第一种,可以在元素类型后面接上[],表示此类型元素组成的一个数组;第二种使用数组泛型, Array<元素类型>

1
2
3
let list: number[] = [1, 2, 3];
<!-- 使用数组泛型 -->
let list: Array<number> = [1, 2, 3];

元组 Tuple

元组类型允许表示一个已知元素数量和类型的数组,各元素类型不必相同。

1
2
3
4
let x: [string, number];

x = ['hello', 10]; // ok
x = [10, 'hello']; // error

当访问一个已知索引的元素,会得到正确的类型:

1
2
console.log(x[0].substr(1)); // ok
console.log(x[1].substr(1)); // error

当访问一个越界元素,会使用联合类型替代:

1
2
3
x[3] = 'world';
console.log(x[5].toString()); // ok, string 和 number 都有 toString
x[6] = true; // Error, 布尔值不是 string | number 类型

枚举

enum类型

1
2
enum Color {Red, Green, Blue}
let c:Color = Color.Green;

Any

1
2
3
let notSure: any = 4;
notSure = 'maybe a string instead';
notSure = false;

Void

某种程度来讲,void 类型像是 any 的范类型,它表示没有任何类型。当一个函数没有返回值时,你通常会见到其返回值类型是 void:

1
2
3
function warnUser():void {
console.log('This is my warning message');
}

声明一个 void类型的变量没有什么大用,因为只能为它赋值 undefined 和 null。

1
let unusabe: void = undefined;

Null 和 Undefined

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

默认情况下, null 和 undefined 是所有类型的子类型。但是当指定了 –strictNullChecks 标记,null 和 undefined 只能赋值给 void 和它们各自。

Never

never类型表示的是那些永不存在的值的类型。 例如, never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型; 变量也可能是 never类型,当它们被永不为真的类型保护所约束时。

never类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是never的子类型或可以赋值给never类型(除了never本身之外)。 即使 any也不可以赋值给never。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 返回 never 的函数必须存在无法到达的终点
function error(message: string): never {
throw new Error(message);
}

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

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

}
}

Object

Object 表示非原始类型,除 number, string, boolean, symbol, null, undefined 之外的类型。
使用Object类型,可以更好的表示像 Object.create这样的API。

1
2
3
4
5
6
declare function create(o: object | null): void;
create({ prop: 0 }); //ok
create(null); //ok
create(42); //Error
create('string'); //Error
create(false); //Error

类型断言

两种方式,其一是’尖括号’语法:

1
2
let someVaule: any = 'this is a string';
let strLenght: number = (<string>someValue).length;

as语法:

1
2
let someValue: any = 'this is a string';
let strLength: number = (someValue as string).length;

let