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 创造的对象不是布尔值

typescript有byte吗 typescript partial_学习

//正确写法
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() //编译错误