ts主要对JS起到一个规范作用
基础使用
// 基本使用
let str: string = '张三'//定义基本数据类型直接冒号接类型即可(官方推荐小写,也可以大写但会出问题)
let str2:String = '李四' //大写模式也可以,但是只适用于new String()的时候
let boo:boolean = true //布尔值
let num: number = 123 //数字
let und: undefined = undefined // undefined
let nul: null = null // null
let big:bigint = 123n
let sym: symbol = Symbol('symbol')
let any:any = '任意类型'//当ts报错或者实在不方便定义类型可以使用any类型
let unk: unknown //与any相似但又有区别,比如将一个类型为string的变量x,可以将any定义的值赋给x却不能将unknown的值赋给x,除非类型断言
//never一般用于定义函数的返回值,基本不用于变量定义,如果函数没有返回值即可使用never,一般开发中用的很少基本不用
function fun():never{
throw new Error('never return')//由于函数不写返回值也会默认返回一个undefined,而undefined不符合never规范
}
//void一般用于定义函数的返回值,如果没有函数没有返回值即可使用void,默认返回的undefined是符合void的规范的
function fun2():void{
return undefined//函数默认是会返回一个undefined的,所以此写法也可以
}
对象类型使用
let obj: object = { name: 'jack' } // 对象
// 当为对象时只要不是基本数据类型都可以,比如
obj = []; obj = ()=>{};obj = new String();
// 当赋值基本数据类型的时候报错,比如
// obj = '字符串';obj = 123;obj = true;obj = null;obj = undefined;
let obj2:Object = { name: 'rose'}//大写对象
// 当为大写对象时可以为部分基本数据类型,比如:
obj2 = '字符串';obj2 = 123;obj2 = true;//因为普通的字符串或者数字都能使用点toString()方法,那就表示他们是属于Object范围的
// 但是像null跟undefined依旧还是不属于Object
/** 一般两个object开发中用的比较少,因为限制范围太广泛了* */
let user:{name:string, email:string,[key:string]:any}//定义一个简单对象并规范类型
user = {name:'jack', email:'jack@example.com'}
// 往对象身上添加一个属性,有了索引签名后则可以往对象身上添加之前没有定于的属性
user.phone = '10086'//此时如果没有加[key:string]:any则会报错,[key:string]:any表示索引签名,key表示占位符写啥都行可以是[index:string]:any
函数类型使用
// 函数
let func:(x:number,y:number)=>number;//表示函数的参数必须是两个且必须是数字类型,箭头后面表示函数返回值必须是数字
func = function(x,y){
return x + y
}
func(2,3)
数组使用
// 数组
let arr: number[] = [1,2,3] // 数组定义
// 数组可以定义泛型
let arr2: Array<number> = [1,2,3] // 泛型
枚举
// 枚举
// 枚举的作用主要是起一个规范作用,比如在开发的时候只能在枚举的数据范围内使用某些值(枚举一般习惯性大写)
enum Status {
Primary,
Success,
Error,
Info,
Warning
}
// 枚举也可以是字符串
const enum Status2 {//在枚举前面加上const可以减少编译后的代码即只编译使用的枚举值
Primary ='primary',
Success ='success',
Error ='error',
Info ='info',
Warning ='warning'
}
console.log(Status);//打印值可以看到枚举的单位都对应一个递增的数字
// 使用枚举
function getStatus(type:Status){//规定参数只能是枚举的值
return '结果'
}
getStatus(Status.Primary)
type
// type
// 使用type我们可以定义自己的类型,比如:
type StringOrNumber = string | number; // 定义一个类型,可以是字符串或者数字(一般习惯大写)
let strOrNum: StringOrNumber = 'hello' // 定义类型为StringOrNumber的变量
// 也可以定义两个对象的交集使用 & 符号
type MyType = {
name: string,
age: number
}
let myObj: MyType = { name: 'jack', age: 18 } // 定义类型为MyType的变量