本文内容如下
类型注解
如果你都有了答案,可以忽略本文章,或去TS学习地图寻找更多答案
类型注解
对声明,参数,或者返回值的说明或限制
基本类型:字符串,数字,布尔值
字符串
let title: string = '字符串'
let title: string = 123 //提示错误,因为title是字符串类型,只能赋值字符串
数字
let a:number = 123
布尔类型
let flag:boolean = true
对象
const person:{
name:string,
age:number
} = {
name:'tao',
age:18
}
数组
写法一:let name:Array<string> = []
写法二:let name:string[] = []
字符串数组
let names:Array<string> = ['tom','jeryy']
数字数组
let names:number[] = [1,2,3,4]
混合
let person:(string | number)[] = ['tao', 32]
对象数组
1.直接声明
const person:{name:string,age:number}[] = [
{name:'tao',age:18}
]
2.使用接口
interface User {
name: string,
age: number
}
let users:User[] = [{name: 'tao', age: 18}]
元组tuple:强限制
必须按规定顺序输入
let arr:[string, number, boolean] = ['ts', 8, true]
arr[3] = {} //报错,因为没有定义对象
enum枚举
用于标识状态
注意:
- 如果不赋值,就是索引
- 赋值就是值
- 如果前面赋了值,后面没,则会以前面为基础+1
没有赋值,是索引
enum Direction {
Up,
Down,
Left,
Right
}
log(Direction.Up) //0
log(Direction.[0]) //Up
赋值
enum Flag {
success = 1,
error = 2,
}
let f: Flag = Flag.success
console.log(f) //1
如果前面赋了值,后面没,则会以前面为基础+1
enum Flag {red, blue=5, green}
let f:Flag = Flag.green
console.log(f) //6
any
任意类型,跳过语法检查,什么都可以,等于JS,比如接口不知道返回什么类型
let name:any = 12 //正确
let name:any = ‘tao’ //正确
任意类型的数组
let list:any[] = [1,true,'free']
list[0] = 'lala'
用any替代选择器
let box:any = document.getElementById('box')
unknown
类型any,比any更加严格
any 和 unknown的区别
any 是任何类型的父类和子类
unkonwn 是任何类型的父类,不能是子类,更加严格
// 正确
let x: number = 3
let y: unknown = x //把number赋值给unknown,让unknown当父类
// 正确
let x: number = 3
let y: any = x //把number赋值给any,让any当父类
// 正确
let x: any = 3
let y: number = x //把any赋值给number,让any当子类
// 错误
let x: unknown = 3
let y: number = x //把unknown赋值给number,让unknown当子类
null 和 undefined
null 和 undefined 是任意类型的子类型,可以赋值给任意类型
never
表示从不会出现的值,不太常用,一般用any替代
学习更多