TypeScript使用总结03 - 复杂数据类型

99 阅读2分钟

类型推导

类型推导是编程语言中能够自动推算出变量的值的能力,是强类型语言的特性。

如果说你没有指定这个变量的值,那么这个变量可以是任何值

let uname;
uname=1;
uname='guoming';
uname=null;

当你在初始化一个变量的时候,你给他赋值特定的值,那么这个变量将会背typescript默认是这个类型。

let uname2 = 'guoming'  // 此处ts默认你是string类型
uname2=true; // 你将true赋值给string类型也不会报错 

包装对象(Wrapper object)

JavaScript的数据类型分为两种,一种是原始数据类型,一种是对象类型。

原始数据类型

  • Boolean 布尔值
  • String 字符串
  • undefined 未定义
  • null 未声明
  • symbol 符号变量

如果你要调用一个原始类型的方法的话,那么他会在内部自动帮你包装成对象类型

let name2= 'guoming'
console.log(name2.toUpperCase()) // 将guoming变成GUOMING

以上代码等同于下面这一行语句

let name2 = 'guoming'
console.log(new string(name2).toUpperCase())
let isOk:boolean = true
let isOk2:boolean =Boolean(1) // 这行语句没有任何问题,看做强制类型转换。
let isOk3:boolean =new Boolean(3) // 这行语句会看做新建一个对象并且进行赋值,那么你就无法将一个对象类型赋值给一个基本数据类型,会报错

联合类型

联合类型,表示变量可以是多种类型中的某一种.

以下代码执行的时候,你可以看见一个!符号,这个符号的意思是类型断言,我断言我的变量能够执行后面这个方法,但是如果说后面这个方法没有在这个变量声明的联合类型里面,还是会报错的。【dart也有一样的东西】

let name3:string|number;
console.log(name3!.toString())
name3=3;
console.log(name3.toFixed(2))
name3='zhufeng'
console.log(name3.length)

类型断言

类型断言的本质是能够将一个联合类型的变量,指定成一个更加具体的变量。

let name4:string|number
console.log(name4.toFixed(2)) // 会报错
console.log((name4! as number).toFixed(2));
console.log((name4! as string).length);
console.log((name4! as boolean)) // 会报错。Conversion of type 'string|number' to type 'boolean' may be a mistake
console.log(name4! as any as boolean) // 这样就不会报错了

字面量类型和类型字面量

字面量类型

const up:'UP'='UP';
const down:'Down'='Down';
const right:'Right'='RIght';
const left:'Left'='Left';
const Direction = 'Up'|'Down'|'Left'|'Right'
// 可以实现枚举的效果
function move(direction:Direction){

}
move('down')

类型字面量

type Person = {
    name:string,
    age:number
}
// 如果说缺少了age属性,typescript会报错
let p1:Person ={
    name: 'guoming',
}
let p2:Person = {
    name:'guoming',
    age: '10'
}

字面量类型和联合类型的区别

type T1='1'|'2'|'3' // 字符串字面量的联合类型 
type T2=string|number|boolean // 联合类型
let t1:T1 = true // 错误,只能是1、2、3
let t2:T2 = true // 正确