基本类型约束
ts是一个可选的静态类型约束,是js的超集,简单来说就是给js加上类型系统,让每个参数有明确的意义
TS的数据类型
typescript中为了使编写的代码更规范,更有利于维护,增加了类型校验,写 ts 代码必须指定类型。 在typescript中主要给我们提供了以下数据类型:
- number
- string
- boolean
- null
- undefined
- array
- object
undefined和null是所有其他类型的子类型,它们可以赋值给其他类型 通过添加
strictNullChecks:true,可以获得更严格的空类型检查,null和undefined赋值给自身
let num: number = 0
let str: string = 'abc'
let flag: boolean = false
let a: undefined = undefined
let b: null = null
let array: number[] = [1,2,3] // number类型的数组 等同于 let array: Array<number> = [1,2,3]
let obj:object = {
name: "zero",
age: 18
}
其他常用类型
联合类型
- 多种类型任选一个
let status: number | string // status可以是number或者是string
void类型
- 通常用于约束函数的返回值,表示该函数没有任何返回
function test():void {
console('void类型')
}
never类型
- 通常用于约束函数的返回值,表示该函数永远不可能结束,但是没有类型是 never 的子类型,这意味着声明 never 的变量只能被 never 类型所赋值。
function throwError(msg: string):never {
throw new Error(msg)
}
字面量类型
- 使用一个值进行约束
let gender: "female" | "male"
gender = "female"
// 对象必须有这2个值
let user = {
name: string
age: number
}
user = {
name: 'zero',
age: 18
}
元祖类型(Tuple)
- 一个固定长度的数组,并且数组中每一项的类型确定,就是赋值的类型、位置、个数需要和定义的类型、位置、个数一致。
let tuple: [string, number]
tuble = ["zero", 18]
any类型
- any类型可以绕过类型检查,因此,any类型的数据可以赋值给任意类型
let data:any = 123
类型别名
- type 类型名称 ...,对已知的一些类型定义名称
type user = {
name: string
age:number
gender: "female" | "male"
}
let u: user
u = {
name: 'zero',
age: 18,
gender: 'female'
}
function getUser():user[]{
return []
}
getUser()
函数的相关约束
- 函数重载: 在函数实现之前,对函数调用的多种情况进行声明
// 两个是数字,相乘返回;两个是字符串,拼接返回
// 函数重载,对函数调用的情况进行声明
function combine(a:number, b:number):number;
function combine(a:string, b:string):string;
function combine(a:number | string, b:number | string):number | string{
if (typeof a === "number" && typeof b === "number") {
return a*b
} else if (typeof a === "string" && typeof b === "string"){
return a+b
}
throw new Error("两者必须是相同的类型")
}
const res = combine(1,2)
const result = combine('dog','pig')
- 可选参数: 可以在某些参数名后加上问号,表示该参数可以不用传递。可选参数必须在参数列表的末尾
function sum(a:number, b:number, c?:number){
if(c) {
return a+b+c
} else {
return a+b
}
}
sum(3,4)
sum(3,4,5)
枚举
- 枚举是一个一个罗列出来,通常用于约束某个变量,某个变量的取值范围
- 字面量类型的问题
- 在类型约束位置,会产生重复代码,可以使用类型别名解决该问题
- 逻辑名称和真实的值产生混淆,会导致当修改真实值的时候,产生大量的修改
- 枚举会出现在编译结果中,编译结果中表现为对象
规则:
- 枚举的值可以是数字或字符串
- 数字枚举的值会自动自增
- 被数字枚举约束的变量,可以直接赋值为数字
enum 枚举名 {
枚举字段1 = 值1,
枚举字段2 = 值2
}
enum Gebder{
male = '男',
female = '女'
}
let gender: Gender;
gender = Gender.male;
gender = Gender.female
本文完~