类型
| 类型 | 例子 | 描述 |
|---|---|---|
| number | -1 , 0 , 1... | 任意数字 |
| string | 'hello' , 'good'... | 任意字符串 |
| boolean | true , false | 布尔值 true 或 false |
| 字面量 | 其本身 | 限制变量的值就是该字面量的值 |
| any | * | 任意类型 |
| unknown | * | 类型安全的any |
| void | 空值 ( undefined ) | 没有值 或 undefined |
| never | 没有值 | 不能是任何值 |
| object | {name:'David',age:13} | 任意的 JS 对象 |
| array | [1,2,3] | 任意的 JS 数组 |
| tuple | [4,5] | 元素,TS新增类型,固定长度数组 |
| enum | emun {A,B} | 枚举, TS中新增类型 |
object(对象)
像为对象限制类型,可以直接使用 object 这个类型(但不建议用!!!),因为 函数和数组也是对象,这样就无法做到很好的限制了
let obj:object
obj = function(){} //可以
obj = [] //可以
obj = 1 //不能将类型“number”分配给类型“object”
obj = {} //可以
我们可以为 object 类型,这样限制
let obj: { name: string; age?: number };
这样还可以限制对象里的属性, (? 指的是可选,可以有,也可以没有)
如果我们有这样一个需求:一个对象里必须有name属性为string,其它任意属性可有可无,怎么限制类型呢?
[propName:string]:any
[propName:string]:any 表示任意类型的属性
let obj:{name:string,[propName:string]:any}
obj = {
name:'David'
}
obj = {
name:'David',
a:123,
b:'234',
fun:()=>{}
}
array(数组)
两种方式:string[]、Array< string >
// 声明 string 类型的数组(只支持数组里面有string类型)
let arr: string[];
arr = ["123", "ab"];
// 声明 number 类型的数组(只支持数组里面有number类型)
let arr: number[];
arr = [123, 456];
// 声明 number 类型的数组(只支持数组里面有number类型)
let arr:Array<number>
tuple(元组)
元组就是固定长度的数组,每个索引处有对应的类型
// 声明一个元组,只允许有两个值,第一个是string,第二个是number
let arr3:[string,number]
arr3 = ['aa',123]
enum 枚举
// 声明 性别 枚举
enum GenderEnum {
Male = 0,
Female = 1
}
let person: { name: string; gender: GenderEnum };
person = {
name: "David",
gender: GenderEnum.Male,
};
// 通过 枚举的属性判断性别
if (person.gender === GenderEnum.Male) {
console.log("酷酷的");
} else {
console.log("美美的");
}
之所以用枚举,是因为有一些数字代表了特别的意义,通过枚举可以语义化,也可以减少一些此类的注释
扩展
& (表示同时)
// 表示 person对象中,既要有 name属性类型为string,也要有gender属性类型为string
let person: { name: string } & { gender: string };
person = {
name: "David",
gender: "male",
};
类型的别名
// 将上面的类型 用 commonType 声明,之后用到这样的类型时,都直接用 commonType即可
type commonType = 1|2|3|4|5
let type1:commonType
let type2:commonType