1、Boolean类型
布尔类型有true、false两个值。
let Bool1: boolean = false;
let Bool2: boolean = true;
2、Number类型
let isNumber: number = 123456;
3、String类型
let isString: string = 'hello';
还可以使用模板字符串表示:
let isString: string = 'hello';
let isNumber: number = 123;
两种写法:
第一种:
let isStrNum: string = `${isString}--${isNumber}`; //"hello--123"
第二种:
let isStrNum1: string = 'aaa'+isString+'bbbb'+isNumber; //"aaahellobbbb123"
4、Null 和Undefined
默认情况下null
和undefined
是所有类型的子类型。 就是说你可以把 null
和undefined
赋值给number
类型的变量
将null和undefined赋值给其他类型:
let str: string = 'hello';
let num: number = 123;
num = undefined;
str = null;
console.log(num,str); //undefined, null
但是在配置了strictNullChecks: true 后null和undefined只能赋值给void和它们各自
//Type 'undefined' is not assignable to type 'number'
num = undefined;
5、Object
object
表示非原始类型
let obj: object = { a: 123 };
obj = { b: 456 }; //{ "b": 456 }
obj = 123; //Type 'number' is not assignable to type 'object'. (2322)
obj = 'hello'; //Type 2322
boj = true; //Type 2322
6、Any(任意值)
在 TypeScript 中,任何类型都可以被归为 any 类型,任何类型都可以赋值给any类型。
普通数据类型进行赋值:
let str: string = 'hello';
str = 123; //Type 'number' is not assignable to type 'string'
any类型进行赋值:
let str: any = 'hello';
str = 123;
console.log(str); //123
当一个数组由各种类型的时候也可以用any类型
let arr: any[] = [1, 'hello', true];
7、类型推论
如果没有明确的指定类型、typeScript会依照类型推论的规则推断出一个类型
以下代码没有指定类型,但typeScript会推断类型
let myFavoriteNumber = 'seven';
myFavoriteNumber = 7; //Type 'number' is not assignable to type 'string'.(2322)
等价于:
let myFavoriteNumber: string = 'seven';
myFavoriteNumber = 7; //Type 'number' is not assignable to type 'string'.(2322)
typeScript在没有指定一个明确的类型的时候就会推断出一个类型,这就是:类型推论
如果定义的时候没有赋值,不管之后有没有赋值,都会被推断成 any
类型而完全不被类型检查:
let myFavoriteNumber;
myFavoriteNumber = 'seven';
myFavoriteNumber = 7;
myFavoriteNumber = { hello: 'world'};
console.log(myFavoriteNumber); // { hello: 'world'}
8、Void (空值)
当一个函数没有返回值时,你通常会见到其返回值类型是 void
在函数没有返回值时使用
function voidFun(): void {
console.log('hello');
};
声明一个void类型的变量,只能赋值null和undefined (没有配置strictNullChecks的情况下)
let a: void = undefined;
9、数组类型
有两种方式可以定义数组:
第一种在元素类型后面加上[],表示由此类型元素组成的数组。
let numList: number[] = [1, 2, 3];
let strList: string[] = ['hello', 'world'];
第二种数组泛型,Array<元素类型>
let list: Array<number> = [1, 2, 3];
any在数组用应用,表示数组中出现任意类型
let anyList: any[] = [1, 'hello', { world: 'my'}];
10、元祖 Tuple
元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同
let x: [string, number] = ['hello', 123];
let arr: [string, number] = ['hello', 123];
arr[0] = 'world'; // OK
arr[1] = 789; // OK
console.log(arr) //["world", 789]
但是当直接对元组类型的变量进行初始化或者赋值的时候,需要提供所有元组类型中指定的项。
let arr: [string, number];
只对其中一项进行赋值会报错:
arr = ['hello']; // Error
// Type '[string]' is not assignable to type '[string, number]'.
// Source has 1 element(s) but target requires 2
arr = ['hello', 123]; // OK
需要根据元祖中的指定类型进行赋值:
let arr: [string, number];
arr = ['hello', 123]; // OK
重新赋值:
arr = [123, 'hello'] // Error
// Type 'number' is not assignable to type 'string'.(2322)
// Type 'string' is not assignable to type 'number'.(2322)
越界元素:
当添加越界的元素时,它的类型会被限制为元组中每个类型的联合类型:
let arr: [string, number] = ['hello', 123];
arr.push('world'); // OK, 字符串可以赋值给(string | number)类型
arr.push(true); // Error
//Argument of type 'boolean' is not assignable to parameter of type 'string | number'.(2345)
11、联合类型
联合类型表示取值可以为多种类型中的一种
这里的 let myFavoriteNumber: string | number 的含义是
允许 myFavoriteNumber 的类型是 string 或者 number,但是不能是其他类型。
let myFavoriteNumber: string | number;
myFavoriteNumber = 'hello'; // OK
myFavoriteNumber = 123; // OK
myFavoriteNumber = true; // Error
// Type 'boolean' is not assignable to type 'string | number'
联合类型的变量在被赋值的时候,会根据类型推论的规则推断出一个类型:
let myFavoriteNumber: string | number;
myFavoriteNumber = 'seven';
console.log(myFavoriteNumber.length); // 5
myFavoriteNumber = 7;
这里类型被推断成了number,所以length属性会报错
console.log(myFavoriteNumber.length); // Error
// Property 'length' does not exist on type 'number'