typescript(接口、联合类型、类型别名、数组、函数、默认值)
创始人
2025-05-29 05:49:19
0

接口

定义接口 interface

interface DataType {name:stringage:number// ? 代表可选参数sex?:string
}
// 定义变量使用接口
let data: DataType = {name:'2',age:12,sex:'性别'
}
interface setArgs {// 属性name:string,// 函数fn:()=>string
}
// 函数入参使用接口
function getData(a:setArgs):string{if(a.name){return a.name}else{return a.fn()}
}

前端项目中使用接口校验数据,示例

// 请求axios数据进行数据类型校验 示例:
interface dataObj {userName:string,passWord:string,token:string
}
// 模拟请求数据接口
function getDataList(){return {userName:'2',passWord:'666',token:'sdadasd'}
}
// 接收返回过来的数据,如果数据类型不符合,接收检验会报错
const dataList:dataObj = getDataList()

对于后端返回的唯一标识id,前端不能直接进行修改,我们在使用接口定义的时候,可以使用readonly对属性仅可读操作

interface data1{// 只读属性readonly id:string,name:string
}
// 只有在第一次可以对其进行赋值
let data2:data1 = {id:'2',name:'3'
}
// 再次对其进行修改就会出现错误
// data2.id = '22'

联合类型

变量声明多种类型

let myName: string | number | boolean
myName = 'str'
myName = 2
myName = false
// 访问联合类型的属性和方法,属性和方法必须是共有的,否则会出现错误
// toString() 是共有的方法,所以可以正常使用
myName.toString()
// 类型 number 和 boolean 都不存在length属性 所以会报错
// myName.length

类型别名

给一个类型起个新名字 type

type obj = string
type obj1 = () => string
type obj2 = obj | obj1

数组

在js为[],里面的值可以为任意类型,可以理解为 ts中的 any[]

在ts中增加了类型校验,对于定义有两种: number[] / Array

// 数组里的每一项只能为数字number,出现其他类型会报错,比如['1',2]
let arr : number[]= [1,2,3]
// 如果想让数组每一项有不同的类型,就需要结合联合类型和类型别名一起使用
// 声明一个类型别名
type name = string | number
// 进行类型使用
let arr2: name[] = ['1','2', 1]
// 如果不想声明 可以这样使用
let arr1: Array = ['1','2',1 ]
// 同样用接口依然可以声明,但是没有上面两种简单,接口一般对类数组进行描述,但ts的内置对象已经进行了声明,这里不做描述

函数

函数常见的两种声明 函数声明/函数表达式

// 函数声明
function fn(x,y){return x+y
}
// 箭头函数
const fn1 = (x,y) => x+y
// 函数表达式
const fn2 = function(x,y){return x+y
}

在ts中,对于函数入参和返回值都需要考虑类型校验

// 对于函数声明的校验
function fn3(x: number, y: number): number{return x + y
}
// 对于入参个数也会有校验
// 正常入参
fn3(1,2) 
// 错误入参
fn3(1)
fn3(1,2,3)
// 对于表达式的校验
let num = function(x: number,y: number): number{return x + y
}
const fn4 = (x:number,y:number):number => x+y

对于右侧的函数进行校验,但是对于左边是通过右侧得出的类型,类型推断出来的

如果需要我们可以手动给num进行添加类型

// 手动添加类型的话
let num1:(x:number,y:number) => number = function(x:number,y:number):number{return x+y
}
let num2:(x:number,y:number)=>number = (x:number,y:number):number=>x+y

通过接口可以对左侧添加类型

interface sum{(x:number,y:number):number
}
let sum1:sum
sum1 = (x:number,y:number):number=>x+y
// 错误类型入参
sum1('1',1)
// 入参个数错误
sum1(1,1,2)

输入多余的参数是不被允许的,可以定义可选参数 使用

function fn5(x:number,y?:number):number{return y ? y : x
}
fn5(1)
fn5(1,2)

注意: 可选参数必须在必需参数后面进行,在前面会报错

function fn6(x?:number,y:number):number{return y ? y : x
}

默认值

es6允许了给参数入参增加默认值,ts对于给与默认值的参数识别为可选参数,此时就不受 可选参数必须接在必需参数后面

function fn7(x:number,y:number = 12):number{return x+y
}
function fn8(x:number= 12,y:number ):number{return x+y
}	
fn5(1)
fn5(1,12)

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...