1、布尔值 boolean
布尔值true
false
let checked: boolean = false;
// or
let checked: boolean = true;
2、数字 number
TS中所有的数字都是浮点值,支持:十进制、十六进制、八进制、二进制
let decimal: number = 6; // 十进制
let hex: number = 0xf; // 十六进制
let octal: number = 0o744; // 八进制
let binary: number = 0b1010; // 二进制
3、字符串string
可使用双引号""
或者单引号''
包含字符串数据
let color: string = "blue";
let fruit: string = 'apple';
模板字符串
let age: number = 26;
let name: string = "一路繁华的夏天";
let message: string = `我的昵称是${name},
我今年${age}岁了!`
4、数组Array
数组元素数据类型后跟[]
let list: number[] = [1, 2, 3];
Array<数组元素类型>
let list: Array<number> = [1, 2, 3];
5、元组Tuple
使用固定数量、固定类型(不必一样)的元素来表示的数组
let data: [string, number];
data = ["hello", 1];
// 错误展示
// 缺少类型
data = ["hello"]; // Property '1' is missing in type '[string]' but required in type '[string, number]'
// 对应类型中没有此方法
data[1].substring(1); // Property 'substring' does not exist on type 'number'
// 未匹配到对应位置的类型
data[2] = "err"; // Type '3' is not assignable to type 'undefined'
6、枚举enum
Enum类型的变量成员默认是从0开始递增,也可以设置初始值为其他的,如果存在成员有其他非数字类型的数据,在下一次未设置具体数据的成员的前一个成员必须为数字
enum Color { Red, Green, Blue } // 0 1 2
enum Color { Red = 1, Green, Blue } // 1 2 3
enum Color { Red, Green = 3, Blue } // 0 3 4
enum Color { Red, Green = "", Blue } // Error: Enum member must have initializer.
读取Enum的变量成员
enum Color { Red = 1, Green, Blue } // 1 2 3
let green: Color = Color.Green; // 2
通过值查询Enum变量名称
let value: number = 2;
enum Color { Red, Green, Blue }; // 0 1 2
let key: string = Color[value]; // Blue
7、任意类型any
any
用来描述未知变量类型的数据,此时可以设置any
通过编译时检查,调用方法也不会进行类型判断,因为在运行阶段有可能是存在对应方法的。
let notSure: any = false;
notSure = "1";
notSure = undefined;
notSure.getData();
notSure = 2;
notSure.toFixed(2);
// 知道部分数据类型
let anyArr: any[] = [1, false, "hello"];
anyArr[1] = 100;
Object
同样允许分配任何值,但是不能调用任意方法,就算存在也不可以调用let notSure: Object = 4; notSure.toFixed(2);
8、void
一般用于表示函数无返回值类型
function logMessage(message: string): void {
console.log(`Log ${message}`);
}
也可用于变量类型定义但是能赋值undefined
或者未开启--strictNullChecks
时可以赋值null
,也可以赋值never
类型的值
let voidVal: void = undefined;
voidVal = null; // --strictNullChecks模式下 Error:Type 'null' is not assignable to type 'void'.
9、undefined
和null
类型
let u: undefined = undefined;
let n: null = null;
不设置
--strictNullChecks
情况下,由于null
和undefined
类型是所有其他类型的子类型(除了never
),所以定义的的变量可以赋值给其他类型变量let u: undefined = undefined; let n: null = null; let age: number = u; let height: string = n;
设置
--strictNullChecks
情况下,null
和undefined
类型都可以赋值给any
,undefined
可以赋值给void
let u: undefined = undefined; let n: null = null; let voidVal: void = u; let height: any = n; height = u;
10、never
never
用来表示永远不会出现的类型;
例如:函数总会抛出异常或者函说永远不会有返回值
// 总会抛出异常
function throwError(): never {
throw new Error();
}
// 永不会有返回值
function noReturns(): never {
while(true) {}
}
// return本身为never
function returnNever(): never {
return throwError();
}
never
是所有类型的子类型,可以分配给其他类型;但是没有类型(包括null
和undefined
)是never
的子类型即没有类型可以分配给never
除了never
本身;
function getError(): never {
throw new Error();
}
let neverVal: never = getError();
let booleanVal: boolean = neverVal;
let numberVal: number = neverVal;
let undefinedVal: undefined = neverVal;
let nullVal: null = neverVal;
let stringVal: string = neverVal;
let anyVal: any = neverVal;
let voidVal: void = neverVal;
let symbolVal: symbol = neverVal;
let bigintVal: bigint = neverVal;;
11、object
object
是非原始类型,即任何不是boolean
number
string
bigint
symbol
null
undefined
的类型
let obj: object = {};
obj = neverVal; // never是所有类型的子类型 可以分配给所有类型
obj = voidVal; // Error:Type 'void' is not assignable to type 'object'.
obj = numberVal; // Error:Type 'number' is not assignable to type 'object'.
obj = booleanVal; // Error:Type 'boolean' is not assignable to type 'object'.
obj = stringVal; // Error:Type 'string' is not assignable to type 'object'.
obj = bigintVal; // Error:Type 'bigint' is not assignable to type 'object'.
obj = symbolVal; // Error:Type 'symbol' is not assignable to type 'object'.
// 开启--strictNullChecks
obj = nullVal; // Error:Type 'null' is not assignable to type 'object'.
obj = undefinedVal; // Error:Type 'undefined' is not assignable to type 'object'.
// 关闭--strictNullChecks
obj = nullVal; // null类型是其余类型的子类型
obj = undefinedVal; // undefined类型是其余类型的子类型
12、类型断言
类型断言即告诉编译器我比编译器更知道变量类型,不需要执行类型检查;
类型断言有两种语法:
let someValue: any = "Hello World";
// 尖括号语法 <type>value
let stringLength: number = (<string>someValue).length
// as语法
let stringLength: number = (someValue as string).length