最近刚把ts学完,简单总结一下,ts的话,更强调类型,更加严谨
非原始类型
1.object(不包括基础数据类型),小写的
let obj:object = {a:1}
let obj:object = [1]
2.Object(包括基础数据类型),大写的O
let obj:Object = 1
let obj:Object = '123'
3.{}等价于Object
let obj:{}='123'
数组类型:数组类型有3种,如下,
//第一种
let arr:number[] = [1,2,3]
//第二种:泛型
let arr:Array<number> = [1, 2, 3]//整体是数组,并且里面的元素必须为number类型
//第三种:元组
let arr:[number, number, string] = [1, 2, '3']
联合类型:| 就是‘或’的意思
//第一个例子
第一种写法
let numArr:number|string = 10//number的类型既可以为number类型,也可以为string类型
numArr = 1
numArr = '小花'
第二种写法
let numArr:1 | '2' = 1//表示numArr必须只能等于1和'2'
numArr = '2'
//第二个例子
let obj:{a:1,b:'2'}
obj = {a:1}
obj = {b:'2'}
obj = {a:1,b:'2'}//也就是说obj既可以等于a属性,也可以等于b属性,也可以有ab两个属性
交叉类型:& 就是‘与’的意思
//必须全部满足的意思
let obj:{name:string, age:number}&{height:number}
obj = {'张三', 22, 180}
any与unknown
any:绕过类型检测,简单说,就是使用了any就和js语言没区别了
unknown:可以将所有的类型都赋给unknown,unknown会进行校验(当从后台拿到数据不知道是什么类型使用unknown)
未知类型不能使用tofixed方法
接口类型--interface
//interface用于自定义类型
//1.给对象用
interface MyItf{
name:string
age:number
height:number
}
let obj:MyItf;
obj = {
name:'小花',
age:20,
height:12
}
// 定义接口类型 --- 给数组用
interface MyArr{
[idx:number]:number|string
}
let obj1:MyArr;
obj1 = [1, 2, '小花']
// 定义函数类型 --- 给函数用
interface MyFun{
(p:number,n:string):void
}
let fun:MyFun = (p:number,n:string) => {}
fun(1,"")