TypeScript是JavaScript的超集,具有可选的类型并可以编译为纯JavaScript。
1.字符串类型
let a: string = '张三'
//普通声明
//也可以使用es6的字符串模板
let str: string = `hello,${a}`
2.数字类型
let notANumber: number = NaN;//Nan
let num: number = 123;//普通数字
let infinityNumber: number = Infinity;//无穷大
let decimal: number = 6;//十进制
let hex: number = 0xf00d;//十六进制
let binary: number = 0b1010;//二进制
let octal: number = 0o744;//八进制s
3.布尔类型
注意:使用构造函数 Boolean 创造的对象不是布尔值
//正确写法
let createBoolean:Boolean = new Boolean(1)
let bool1: boolean = true //可以直接使用布尔值
let bool2: boolean = Boolean(1) //也可以通过函数返回布尔值
4.枚举类型
- 普通枚举
初始值默认为0,其余的成员会按顺序自动增长
可以理解为数组下标
enum Fruit {
APPLE,
BANANA,
CHERRY
}
const apple:Fruit= Fruit.APPLE;
console.log(apple) //0
- 设置初始值
enum Fruit {
APPLE = 3,
BANANA,
CHERRY
}
const cherry:Fruit= Fruit.CHERRY;
console.log(cherry) //5
- 字符串枚举
enum Fruit {
APPLE = "苹果",
BANANA = "香蕉",
CHERRY = "樱桃"
}
const cherry:Fruit = Fruit.CHERRY
console.log(cherry) //樱桃
- 常量枚举
使用 const 关键字修饰的枚举,常量枚举与普通枚举的区别是,整个枚举会在编译阶段被删除
const enum Fruit {
APPLE,
BANANA,
CHERRY
}
const fruit:Fruit[] = [Fruit.APPLE,Fruit.BANANA,Fruit.CHERRY];
console.log(fruit); //[ 0, 1, 2 ]
编译之后的js文件如下:
const fruit = [0 /* Fruit.APPLE */, 1 /* Fruit.BANANA */, 2 /* Fruit.CHERRY */];
console.log(fruit);
// 可以看到枚举并没有被编译成js代码 只是把fruit这个数组变量编译出来了
5.空值类型
void 意思就是无效的, 一般只用在函数上,告诉别人这个函数没有返回值
function voidFn(): void {
console.log('test void')
}
void也可以定义undefined 类型
void也可以定义undefined 和 null类型
void 类型主要是用在不需要函数返回值的情况下,比如通常的异步回调函数
6.null和undefined类型
默认情况下 null 和 undefined 是所有类型的子类型。 也就是说,可以把 null 和 undefined 赋值给其他类型。
let u:undefined = undefined
let n:null = null
let str: string = "张三";
str = null;=
str = undefined;
//若tsconfig.json 开启了严格模式
let str: string = "张三";
str = null; // 编译错误
str = undefined; // 编译错误
let u: void = undefined // 编译正确
let n: void = null; // 编译错误
7.any类型和unknown类型
any会跳过类型检查器对值的检查,任何值都可以赋值给any类型;
let value: any = 1;
value = "张三"; // 编译正确
value = []; // 编译正确
value = {};// 编译正确
与 any 一样,所有类型都可以分配给unknow,unknow类型比any更加严格当你要使用any 的时候可以尝试使用unknow
//unknown 可以定义任何类型的值
let value: unknown;
value = true; // 编译正确
value = 42; // 编译正确
value = "Hello World"; // 编译正确
value = []; // 编译正确
value = {}; // 编译正确
value = null; // 编译正确
value = undefined; // 编译正确
value = Symbol("type"); // 编译正确
//这样写会报错unknow类型不能作为子类型只能作为父类型 any可以作为父类型和子类型
//unknown类型不能赋值给其他类型
let names:unknown = '123' // 编译正确
let names2:string = names //编译错误
//any类型可以
let names:any = '123' // 编译正确
let names2:string = names // 编译正确
//unknown可赋值对象只有unknown 和 any
let bbb:unknown = '123' // 编译正确
let aaa:any= '456' // 编译正确
aaa = bbb // 编译正确
let obj:any = {b:1} // 编译正确
obj.a // 编译正确
//如果是unknow 是不能调用属性和方法
let obj:unknown = {b:1,ccc:():number=>213} // 编译正确
obj.b //编译错误
obj.ccc() //编译错误