如果需要声明一个不确定的变量类型建议使用unknown,最好不要使用any因为不安全。
typescript类型
let a:unknown;
let b:any;
let c:number;
let d:string;
let e:boolean;
let f:enum; //枚举是一个可被命名的整型常数的集合,枚举类型为集合成员赋予有意义的名称
let g:never; //never 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值
let h:undefined;
any不安全原因:
//可见声明的b是number类型,但是被a赋值后污染了变成了string类型,而且没有报错
let a:any
let b:number
a= '123123'
b = a
//这样b=a就会报错
let a:unknown
let b:number
a= '123123'
b = a //报错
数组&&联合类型
//声明一个数字类型的数组
let arr:number[]
//联合类型
let arr:number[] | string[]
let arr:(number | string)[]
let arr:Array<number>
let arr:Array<number | string>
对象
//声明一个对象
let obj:{}
let obj:{name:string} //给对象obj指定了一个属性name而且必须是string类型,多一个属性少一个属性都会报错
obj = {name:18} //会报错定义的name必须为字符类型
obj = {name:'zs',age:18} //会报错 没有age这个属性
let obj:{[propName:string]:number} //都知道js里面的对象属性名称都是字符串类型的,这里意思是任意属性名称没有规定,但是属性值为number类型
//void 表示函数没有返回值,若指定为string则表示返回值为string类型以此类推
//函数声明可以使用箭头函数 ()=>void
let obj:{name:string,age:number,say():void,paly:(name:number|string)=>void } = {
name:'zs',
age:28,
say(){},
paly(name){
}
}
let obj:{name:string,age:number,say():void}
类型别名
//用type创建类型别名
type CustomArray = (number|string)
let a:CustomArray
等同于
let a:(number|string)
type CustomArray = (string[] | number[])
let a:CustomArray
等同于
let a:(number[]|string[])
接口
描述对象类型,达到复用的目的
方式一:
interface IPerson {
name:string,
age:number,
say():void
}
方式二:
type IPerson {
name:string,
age:number,
say():void
}
类型别名和接口有一样的作用,都可以给对象指定类型
不同点:接口 只能给对象指定类型,类型别名 不仅可以给对象指定别名,还可以给任意类型指定别名
let person:IPerson ={
name:'zs',
age:18,
say(){
}
}
接口继承
interface person {
name: string
age: number
}
//接口继承 man继承person
interface man extends person {
say(): void
}
let a: man = {
name: 'zs',
age: 18,
say() {},
}
元组
元组类型是另一种类型的数组: 确切的知道包含多少元素,以及特定索引对应的类型
let arr: [number, string] //声明一个元组一共有两个元素,第一个元素为number类型 ,第二个类型为string类型。
arr = [1, 3] //报错,索引为1的元素应该是string类型
arr = [1, '3'] //正确
arr = [1, '3',2] //报错,只能包含两个元素
类型推论
let num:number = 10
function(num1:number,num2:number):number {
return num1 + num2
}
//ts会自动帮忙推断你的类型
let num = 10 //可省略:number
function(num1:number,num2:number){ //可省略返回值的类型注解
return num1 + num2
}