一、Boolean
let isDone: boolean = false;
二、Number
let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
let binaryLiteral: number = 0b1010;
let octalLiteral: number = 0o744;
let bigLiteral: bigint = 100n; // bigint是大整数的类型:注意:1,仅在值可能大于 2^53 - 1 时使用 BigInt;2,不要在两种类型之间进行相互转换。
三、String
let name: string = "bob";
四、Array
// 两种方式可以定义数组:
let list: number[] = [1, 2, 3];
let list: Array<number> = [1, 2, 3];
五、Tuple(新增)
元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。比如,你可以定义一对值分别为 string
和 number
类型的元组。
let x: [string, number];
x = ['hello', 10]; // OK
x = [10, 'hello']; // Error
六、Enum(新增)
enum 类型是从0开始递增+1,除非指定值,且后面的还是按照初始值+1.
enum Color {Red, Green=2, Blue,Yellow=7 ,Dark}
let c1: string = Color[0];
let c: Color = Color.Red;
let d1: string = Color[1];
let d: Color = Color.Green;
let e1: string = Color[2];
let e: Color = Color.Blue;
let f1: string = Color[3];
let f: Color = Color.Yellow;
let g1: string = Color[4];
let g: Color = Color.Dark;
console.log('enum',c1,c,d1,d,e1,e,f1,f,g1,g)
// 输出:'enum',Red 0 undefined 2 Green 3 Blue 7 undefined 8
七、Unknown
描述一个我们还不知道其类型的变量
唯二的顶级类型,另一个顶级类型是any。unknown 和 any 的主要区别是 unknown 类型会更加严格:在对 unknown 类型的值执行大多数操作之前,我们必须进行某种形式的检查。而在对 any 类型的值执行操作之前,我们不必进行任何检查。
参考:https://juejin.cn/post/6844903866073350151
let notSure: unknown = 4;
notSure = "maybe a string instead";
notSure = false; // 可以改变类型
八、Any
let notSure: any = 4;
notSure.ifItExists(); // 可以
notSure.toFixed(); // 可以
let prettySure: unknown = 4;
prettySure.toFixed(); // 不可以,需要判断是否是数字
九、Void
某种程度上来说, void 类型像是与 any 类型相反,它表示没有任何类型
// 1,定义没有返回值的函数
function warnUser(): void {
console.log("This is my warning message");
}
// 2,赋予 null (只在ts配置 --strictNullChecks 未指定时)和 undefined :
let unusable: void = undefined;
十、Null 和 Undefined
默认情况下 null 和 undefined 是所有类型的子类型。然而,当你指定了 —strictNullChecks 标记, null 和 undefined 只能赋值给 any 和它们各自的类型(有一个例外是 undefined 还可以赋值给 void 类型)。
ps):官方鼓励尽可能地使用 —strictNullChecks
let u: undefined = undefined;
let n: null = null;
十一、Never
永不存在的值的类型,一般配合throw new Error使用
// 返回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 , bigint , symbol , null 或 undefined 之外的类型。
declare function create(o: object | null): void;
create({ prop: 0 }); // OK
create(null); // OK
create(42); // Error
create("string"); // Error
create(false); // Error
create(undefined); // Error
十三、类型断言
类型断言有两种形式。
// 1,其一是 “尖括号” 语法:(JSX无法使用)
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;
// 2,另一个为 as 语法:
let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;
// 建议as,兼容性更好
十四、关于 let
es6新关键字,能解决很多问题,尽量使用
十五、关于 Number, String, Boolean, Symbol 和 Object
以上这些类型和我们以上推荐的小写版本的类型是一样的。但这些类型不属于语言的基本类型,并且几乎在任何时候都不应该被用作一个类型
// 错误写法
function reverse(s: String): String {
return s.split("").reverse().join("");
}
reverse("hello world");
// 正确写法
function reverse(s: string): string {
return s.split("").reverse().join("");
}
reverse("hello world");