发布时间:2024-06-06 19:01
前言
博主主页👉🏻蜡笔雏田学代码
专栏链接👉🏻【TypeScript专栏】
上篇文章大概了解了一下TypeScript,👉🏻详细内容请阅读【TypeScript介绍】一文带你初步了解TypeScript
今天开始学习学习TypeScript常用类型!
感兴趣的小伙伴一起来看看吧~🤞
JS 不会检查变量的类型是否发生变化
。而 TS 会检查
。TypeScript 类型系统的主要优势:可以显示标记出代码中的意外行为,从而降低了发生错误的可能性。
示例代码:
let age: number = 18
说明:代码中的 [ [ [: number]() 就是类型注解。
作用:为变量添加类型约束
。比如,上述代码中,约定 变量age的类型为number(数值类型)。
解释:约定了什么类型,就只能 给变量赋值该类型的值,否则,就会报错。
可以将 TS 中的常用基础类型细分为两类:1. JS 已有类型,2.TS 新增类型。
原始类型:
number/string/boolean/null/undefined/symbol。对象类型:
Object(包括:数组,对象,函数等)。number/string/boolean/null/undefined/symbol。
特点:简单。这些类型,完全按照 JS 中类型的名称来书写。
let age: number = 18
let myName: string = '刘老师'
let isLoading: boolean = false
//等等...
特点:对象Object类型,在 TS 中更加细化,每个具体的对象都有自己的类型语法。
数组类型的两种写法:(推荐使用number[]写法)
let numbers: number[] = [1,3,5]
let strings1: string[] = ['a','b','c']
let strings2: Array<string> = ['a','b','c']
需求:数组中既有 number 类型,又有 string 类型,这个数组的类型应该如何写?
let arr: (number | string)[] = [1,'a',3,'b']
解释:|(竖线)在 TS 中叫做联合类型(由两个或多个其他类型组成的类型,表示可以是这些类型中的任意一种)。
注意:这是 TS 中联合类型的语法,只有一根竖线( | ),不要与 JS 中的或(||)混淆了。
类型别名(自定义类型):为任意类型起别名。
使用场景:当同一类型(复杂)被多次使用时,可以通过类型别名,简化该类型的使用。
type CustomArray = (number | string)[]
let arr1: CustomArray = [1,'a',3,'b']
let arr2: CustomArray = ['x','y',6,7]
解释:
函数的类型实际上指的是:函数参数和返回值的类型。
为函数指定类型的两种方式:1.单独指定参数,返回值类型。2.同时指定参数、返回值类型。
1.单独指定参数、返回值的类型:
function add1(num1: number, num2: number): number {
return num1 + num2
}
const add2 = (num1: number, num2: number): number => {
return num1 + num2
}
2.同时指定参数、返回值类型:
const add: (num1: number, num2: number) => number = (num1, num2) => {
return num1 + num2
}
解释:当函数作为表达式时,可以通过类似箭头函数形式的语法来为函数添加类型。
注意:这种形式只适用于函数表达式
。
function greet(name: string): void {
console.log('Hello',name)
}
使用函数实现某个功能时,参数可以传也可以不传。这种情况下,在给函数参数指定类型时,就用到可选参数了。
比如,数组的slice方法,可以slice(),也可以slice(1),还可以slice(1,3)。
function mySlice(start?: number, end?: number): void {
console.log('起始索引:', start, '结束索引:', end)
}
可选参数:在可传可不传的参数名称后面添加?(问号)。
注意:可选参数只能出现在参数列表的最后,也就是说可选参数后面不能再出现必选参数。
JS中的对象是由属性和方法构成的,而TS中对象的类型就是在描述对象的结构(有什么类型的属性和方法)。
let person: { name: string; age: number; sayHi(): void } = {
name: 'jack',
age: 19,
sayHi() {}
}
或者:
let person: {
name: string
age: number
sayHi: () => void
greet(name: string): void
} = {
name: '李老师',
age: 18,
sayHi() {},
greet(name) {}
}
解释:
对象的属性或方法,也可以是可选的,此时就用到可选属性了。
比如,我们在使用axios({…})时,如果发送GET请求,method属性就可以省略。
function myAxios(config: { url: string; method?: string }) {
console.log(config)
}
可选属性的语法与函数可选参数的语法一致,都使用?(问号)来表示。
interface(接口)和type(类型别名)的对比:
interface IPerson { //无等号
name: string
age: number
sayHi(): void
}
type IPerson = { //有等号
name: string
age: number
sayHi(): void
}
type NumStr = number | string
如果两个接口之间有相同的属性或方法,可以将公共的属性或方法抽离出来,通过继承来实现复用。
比如,这两个接口都有x,y两个属性,重复写两次,可以,但很繁琐。
interface Point2D { x: number; y: number }
interface Point3D { x: number; y: number; z: number }
更好的方式:
interface Point2D { x: number; y: number }
interface Point3D extends Point2D { z: number }
解释:
今天的分享就到这里啦✨ \\textcolor{red}{今天的分享就到这里啦✨} 今天的分享就到这里啦✨
原创不易,还希望各位大佬支持一下 \\textcolor{blue}{原创不易,还希望各位大佬支持一下} 原创不易,还希望各位大佬支持一下
🤞 点赞,你的认可是我创作的动力! \\textcolor{green}{点赞,你的认可是我创作的动力!} 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向! \\textcolor{green}{收藏,你的青睐是我努力的方向!} 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富! \\textcolor{green}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!