1. 布尔类型
let isDone:boolean = false;
2. 数字类型
let i:number = 1.1
3.字符串
let str:string = 'abc'
4. null undefined
let u: undefined = undefined;
let n: null = null;
console.log('null undefined u == undefined, n == null:', u == undefined, n == null)
console.log('null undefined u === undefined, n === null:', u === undefined, n === null)
和js一样,返回的都是true
typescript中的五种数据类型和JavaScript这五中基本数据基本上是一样的,除了定义稍微有区别。
这五种类型在JavaScript中称为原始数据类型,还有一个es6中symbol。
5.数组Array 和 元组tuple
javascript中,定义一个数组可以直接这样定义:
let arr = ['ab', 123, {a: 123}];
let arr2 = arr;
arr.push(99);
console.log(arr[0], arr[6]); // 'ab' undefined
console.log(arr2[3], typeof arr2, Array.isArray(arr2)); // 99 'object' true
而在typescript中,定义数组有两种方法,但是都需要限制每一项的值的类型
let nums: number[] = [1,2,4,5]
let numList:Array<string> = ['abc', 'ab234']
let nums2 = nums;
nums2[3] = 333;
nums2.push(999)
console.log(`nums: ${nums}.`) // nums: 1,2,4,333,999.
如果数组有多种类型的值,就需要用元组。
元组的定义方式:
let x: [string, number] = ['abc', 123]
在 2.6 版本之前,TypeScript 对于元组长度的校验和 2.6 之后的版本有所不同。
在 2.6 及之前版本中,超出规定个数的元素称作越界元素,但是只要越界元素的类型是定义的类型中的一种即可。
比如:
let x: [string, number];
x = ['hello', 10]; // OK
x[3] = 'world'; // OK, 字符串可以赋值给(string | number)类型
我们定义的类型有两种:string 和 number,越界的元素是 string 类型,属于联合类型,所以没问题。
在 2.6 之后的版本,去掉了这个越界元素是联合类型的子类型即可的条件,要求元组赋值必须类型和个数都对应。
x[3] = 'world'; // error
那么如果需要像JavaScript那样,定义不同类型,不限数量的数组怎么办呢?
有个any类型
let y:any[] = [1, 'abc',{a: "123"}]
y.push({aab: "123"}) // ok