文章目录
1,引入类型的概念
在JS中,变量可以赋值任意类型。
TS:这个类型的变量,只能存放这个类型的值。
不答应就报错。
举例:
let msg:string=123
console.log(msg)
效果:
默认也会生成js,后期可以配置,让他不生成。
2,声明类型
a)基本写法
let 名:类型=值
let msg:string="你好,世界!"
b)类型推断
如果声明时赋值,类型可以省略。
编译器会自动加上对应的类型。
let msg="你好,世界!"
//msg也是string类型
3,五大基本类型
类型 | 含义 |
---|---|
number | number |
string | string |
boolean | boolean |
null | null |
undefined | undefined |
这没什么好说的。
4,杂七杂八的类型
类型 | 含义 |
---|---|
any | 不限定类型 |
unknown | 不限定类型,不能赋值给别人 |
void | 没有值 |
never | 没有值 |
基本值 | 只能是该基本值 |
联合类型 | 可以存放多个类型的值 |
any
不限定,当JS用。
let msg:any
//想放啥放啥
不声明类型,不赋值,也会是any。
let msg;
//msg还是any
不建议使用。
unknown
any:可以赋值给任何变量。
let msg:any
let result:string=msg
//正常运行
unknown:不能赋值给别人。
let msg:unknown
let result:string=msg
//会报错
如何赋值给别人呢?
- 类型判断
let msg:unknown
if(typeof msg==="string"){
let result:string=msg
}
//正常运行
- 类型断言
告诉解析器,这就是一个xxx类型。
let msg:unknown
let result:string=msg as string
写法二:
let msg:unknown
let result:string=<string>msg
只是不报错,但具体是不是这个类型,得由我们来判断。
void
一个标记,表示没有返回值。
function a():void {
console.log(1)
}
never
一个标记,表示永远不会返回。
function abc(): never {
throw new Error("error")
}
基本值
类型可以是一个基本值,表示只能赋值这个值。
let msg:1
//msg只能存放1
联合类型
或,可以存放string,boolean中的一种
let msg:string|boolean
与,既要有name,又要有age
let msg:{
name:string}&{
age:number}
自定义类型。
比如,只有1234四个值。
type myNum=1|2|3|4;
let msg:myNum
5,对象类型
类型 | 含义 |
---|---|
object,{ } | 对象 |
(xxx,xxx)=>xxx | 函数 |
array | 数组 |
tuple | 元组 |
enum | 枚举 |
基本对象
是对象就行,没有要求。
let abc:object
let bcd:{
}
限定属性。
let abc:{
name:string}
//对象,name属性要是string
//不能有其他属性
限定部分属性。
let abc:{
name:string,
[propName:string]:any
}
//可以随意加属性
函数对象
let abc: (a: number, b: number) => number;
abc = function (a: number, b: number) {
return a + b;
}
数组
某一类型的数组
let abc: string[];
//只能存string
写法二:
let abc: Array<string>;
元组
数组,但是固定长度。
let abc: [string,number];
只能有两个元素,而且类型依次是string,number
枚举
只能在几个值之间选择一个。
enum Gender {
Male,
Female
}
let myGender: Gender;
myGender = Gender.Female
语义好一些。