八个 javaScript 的类型

1.布尔类型

1
let bool: boolean = false;
2
bool = true;
3
// bool = 'hello' // 不能将类型“"hello"”分配给类型“boolean”。
4
// bool = 123 // 不能将类型“123”分配给类型“boolean”。
5
6
// 赋给 bool 的值也可以是一个计算之后结果是布尔值的表达式,比如:
7
8
let b = !!0;
9
console.log(b); // false

2.数值类型

1
let num: number = 0;
2
num = 123;
3
num = 0b1111011; // 二进制的 123
4
num = 0o173; // 八进制的 123
5
num = 0x7b; // 十六进制的 123
6
7
// num = '100' // 不能将类型“"100"”分配给类型“number”。
8
// num = false // 不能将类型“false”分配给类型“number”。

3.字符串

字符串类型中你可以使用单引号和双引号包裹内容,但是可能你使用的 tslint 规则会对引号进行检测,使用单引号还是双引号可以在 tslint 规则里配置。你还可以使用 ES6 语法——模板字符串,拼接变量和字符串更为方便。

1
let str: string = "hello";
2
let st: string = `${str}`;
3
4
// str = 100 // 不能将类型“100”分配给类型“string”。
5
// str = false // 不能将类型“false”分配给类型“string”。
6
7
let s: "STRING";
8
// 另外还有个和字符串相关的类型:
9
// 即把一个字符串字面量作为一种类型,比如上面的字符串"STRING",当你把一个变量指定为这个字符串类型的时候,就不能再赋值为其他字符串值了,如:
10
// s = 'a' // 不能将类型“"a"”分配给类型“"STRING"”。

4.数组

1
// 在 TypeScript 中有两种定义数组的方式:
2
let list1: number[] = [1, 2, 3];
3
let list2: Array<number> = [1, 2, 3];
4
5
// let list3: ReadonlyArray<number> = [1, 2, 3] // 即只读数组。
6
7
list3 = [];
8
9
// console.log(list3)

第一种形式通过number[]的形式来指定这个类型元素均为 number 类型的数组类型,
这种写法是推荐的写法,
也可以使用第二种写法。
注意,这两种写法中的number指定的是数组元素的类型,你也可以在这里将数组的元素指定为任意类型。
如果你要指定一个数组里的元素既可以是数值也可以是字符串,那么你可以使用这种方式:number|string[]
这种方式我们在后面学习联合类型的时候会讲到。

当你使用第二种形式定义时,tslint 可能会警告让你使用第一种形式定义,如果你就是想用第二种形式,可以通过在 tslint.json 的 rules 中加入"array-type": [false] 关闭 tslint 对这条的检测。

5.null

1
let u: undefined = undefined;
2
// 这里可能会报一个 tslint 的错误:Unnecessary initialization to 'undefined',就是不能给一个值赋 undefined,但我们知道这是可以的,所以如果你的代码规范想让这种代码合理化,可以配置 tslint,将"no-unnecessary-initializer"设为 false 即可

6.undefined

1
let n: null = null;

7.object

1
let obj: object;
2
3
obj = { name: "object" };
4
5
// console.log(obj.name) // 类型“object”上不存在属性“name”

8.symbol

1
let sym: symbol = Symbol("你好");
2
3
console.log(sym);