定制软件【TypeScript基础】TypeScript之常用类型(上)

前言

博主主页👉🏻
专栏链接👉🏻
定制软件上篇文章大概了解了一下,👉🏻定制软件详细内容请阅读
定制软件今天开始学习学习TypeScript常用类型!
定制软件感兴趣的小伙伴一起来看看吧~🤞

文章目录


TypeScript常用类型

概述:TS 提供了 JS 定制软件的所有功能,定制软件并且额外的增加了:类型系统。

  • 所有的 JS 代码都是 TS 代码。
  • JS 有类型(比如:number/string等),但是 JS 定制软件不会检查变量的类型是定制软件否发生变化。而 TS 会检查

TypeScript 定制软件类型系统的主要优势:可以定制软件显示标记出代码中的意外行为,定制软件从而降低了发生错误的可能性。

1. 类型注解

示例代码:

let age: number = 18
  • 1

说明:代码中的 [ [ [: number]() 定制软件就是类型注解。

作用:为变量定制软件添加类型约束。比如,定制软件上述代码中,约定 变量age的类型为number(数值类型)。

解释:定制软件约定了什么类型,就只能 定制软件给变量赋值该类型的值,否则,就会报错。

2. 定制软件常用基础类型概述

可以将 TS 定制软件中的常用基础类型细分为两类:1. JS 已有类型,2.TS 新增类型。

  1. JS已有类型
    • 原始类型:number/string/boolean/null/undefined/symbol
    • 对象类型:Object(包括:数组,对象,函数等)
  2. TS 新增类型
    • 联合类型、定制软件自定义类型(类型别名)、接口、元组、定制软件字面量类型、枚举、void、any等。

3. 原始类型

number/string/boolean/null/undefined/symbol。

特点:简单。这些类型,完全按照 JS 中类型的名称来书写。

let age: number = 18let myName: string = '刘老师'let isLoading: boolean = false//等等...
  • 1
  • 2
  • 3
  • 4

4. 数组类型

特点:对象Object类型,在 TS 中更加细化,每个具体的对象都有自己的类型语法。

  • 数组类型的两种写法:(推荐使用number[]写法)

    let numbers: number[] = [1,3,5]let strings1: string[] = ['a','b','c']let strings2: Array<string> = ['a','b','c']
    • 1
    • 2
    • 3

联合类型

需求:数组中既有 number 类型,又有 string 类型,这个数组的类型应该如何写?

let arr: (number | string)[] = [1,'a',3,'b']
  • 1

解释:|(竖线)在 TS 中叫做联合类型(由两个或多个其他类型组成的类型,表示可以是这些类型中的任意一种)。

注意:这是 TS 中联合类型的语法,只有一根竖线( | ),不要与 JS 中的或(||)混淆了。

5. 类型别名

类型别名(自定义类型):为任意类型起别名。

使用场景:当同一类型(复杂)被多次使用时,可以通过类型别名,简化该类型的使用

type CustomArray = (number | string)[]let arr1: CustomArray = [1,'a',3,'b']let arr2: CustomArray = ['x','y',6,7]
  • 1
  • 2
  • 3

解释:

  1. 使用 type 关键字来创建类型别名。
  2. 类型别名(比如:此处的CustomArray),可以是任意合法的变量名称。
  3. 创建类型别名后,直接使用该类型别名作为变量的类型注解即可。

6. 函数类型

函数的类型实际上指的是:函数参数和返回值的类型

为函数指定类型的两种方式:1.单独指定参数,返回值类型。2.同时指定参数、返回值类型。

1.单独指定参数、返回值的类型:

function add1(num1: number, num2: number): number {  return num1 + num2}const add2 = (num1: number, num2: number): number => {  return num1 + num2}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2.同时指定参数、返回值类型:

const add: (num1: number, num2: number) => number = (num1, num2) => {  return num1 + num2}
  • 1
  • 2
  • 3

解释:当函数作为表达式时,可以通过类似箭头函数形式的语法来为函数添加类型。

注意:这种形式只适用于函数表达式

  • 如果函数没有返回值,那么,函数返回值类型为:void
function greet(name: string): void {  console.log('Hello',name)}
  • 1
  • 2
  • 3
  • 使用函数实现某个功能时,参数可以传也可以不传。这种情况下,在给函数参数指定类型时,就用到可选参数了。

    比如,数组的,可以slice(),也可以slice(1),还可以slice(1,3)。

    function mySlice(start?: number, end?: number): void {  console.log('起始索引:', start, '结束索引:', end)}
    • 1
    • 2
    • 3

    可选参数:在可传可不传的参数名称后面添加?(问号)。

    注意:可选参数只能出现在参数列表的最后,也就是说可选参数后面不能再出现必选参数。

7. 对象类型

JS中的对象是由属性和方法构成的,而TS中对象的类型就是在描述对象的结构(有什么类型的属性和方法)。

let person: { name: string; age: number; sayHi(): void } = {  name: 'jack',  age: 19,  sayHi() {}}
  • 1
  • 2
  • 3
  • 4
  • 5

或者:

let person: {     name: string    age: number     sayHi: () => void    greet(name: string): void } = {    name: '李老师',    age: 18,    sayHi() {},    greet(name) {}}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

解释:

  1. 直接使用{}来描述对象结构。属性采用属性名:类型的形式;方法采用方法名():返回值类型的形式。
  2. 如果方法有参数,就在方法名后面的小括号中指定参数类型(比如:greet (name: string): void)。
  3. 在一行代码中指定对象的多个属性类型时,使用;(分号)来分隔。
  • 如果一行代码只指定一个属性类型(通过换行来分隔多个属性类型),可以去掉分号;(分号)。
  • 方法的类型也可以使用箭头函数形式(比如:{sayHi:() => void})。

对象可选属性

对象的属性或方法,也可以是可选的,此时就用到可选属性了。

比如,我们在使用axios({…})时,如果发送GET请求,method属性就可以省略。

function myAxios(config: { url: string; method?: string }) {  console.log(config)}
  • 1
  • 2
  • 3

可选属性的语法与函数可选参数的语法一致,都使用?(问号)来表示。

8. 接口

interface(接口)和type(类型别名)的对比:

  • 相同点:都可以给对象指定类型。
  • 不同点:
    1. 接口,只能为对象指定类型。
    2. 类型别名type,不仅可以为对象指定类型,实际上可以为任意类型指定别名。
interface IPerson { //无等号  name: string  age: number  sayHi(): void}
  • 1
  • 2
  • 3
  • 4
  • 5
type IPerson = { //有等号  name: string  age: number  sayHi(): void}
  • 1
  • 2
  • 3
  • 4
  • 5
type NumStr = number | string
  • 1

接口的继承

如果两个接口之间有相同的属性或方法,可以将公共的属性或方法抽离出来通过继承来实现复用

比如,这两个接口都有x,y两个属性,重复写两次,可以,但很繁琐。

interface Point2D { x: number; y: number }interface Point3D { x: number; y: number; z: number }
  • 1
  • 2

更好的方式:

interface Point2D { x: number; y: number }interface Point3D extends Point2D { z: number }
  • 1
  • 2

解释:

  1. 使用extends(继承)关键字实现了接口Point3D继承Point2D。。
  2. 继承后,Point3D就有了Point2D的所有属性和方法(此时,Point3D同时有x,y,z三个属性)。

今天的分享就到这里啦✨ \textcolor{red}{今天的分享就到这里啦✨} 今天的分享就到这里啦

原创不易,还希望各位大佬支持一下 \textcolor{blue}{原创不易,还希望各位大佬支持一下} 原创不易,还希望各位大佬支持一下

🤞 点赞,你的认可是我创作的动力! \textcolor{green}{点赞,你的认可是我创作的动力!} 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向! \textcolor{green}{收藏,你的青睐是我努力的方向!} 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富! \textcolor{green}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发