ts总结一下
ts基础应用
/*** 泛型工具类型*/
interface IProps {id: string;title: string;children: number[];
}
type omita = Omit<IProps, 'id' | 'title'>;
const omitaA: omita = {children: [1]
};
type picka = Pick<IProps, 'id' | 'title'>;
const pickaA: picka = {id: '',title: '1'
};
type partiala = Partial<IProps>;
const partialaA: partiala = {id: '1'
};
type readonlya = Readonly<IProps>;
const readonlyaA: readonlya = {id: '1',title: '1',children: [1]
};
//Record<keys,Type>构造一个对象类型,属性键为keys,属性类型为Type
type recorda = Record<'a' | 'b' | 'c', string[]>;
const recordaA: recorda = {a: ['1'],b: ['1'],c: ['1']
};/*** 泛型函数 箭头函数和普通函数*/// 箭头函数写法
const getValue = <T>(value: T): T => {return value;
};
// 声明函数写法
function getValue1<T>(value: T): T {return value;
}getValue<number>(1);
getValue1(false); //类型推断为字面量类型100// 多个参数
function getArr<K, V>(value1: K, value2: V): [K, V] {return [value1, value2];
}/*** 泛型约束* 使用extends关键字为泛型添加约束* keyof关键字获取对象所有键的集合*/
interface Ilength {length: number;
}
const getLength = <T extends Ilength>(value: T): number => {return value.length;
};const getProp = <T, k extends keyof T>(obj: T, key: k) => {return obj[key];
};
getProp({ name: 'name', age: 1 }, 'name');/*** 索引签名类型* 定义对象和数组*/interface IAnyObj<T> {[key: string]: T;
}const myObj: IAnyObj<string> = {name: 'name'
};interface IAnyArray<T> {[index: number]: T;
}const myArray: IAnyArray<number> = [1, 2];/*** 映射类型 in (keyof)* typeof*/type Person = { name: string; age: number };
type PerKeyof = keyof Person; // keyof后接类型 name | age
const per1: PerKeyof = 'age';const person: Person = { name: 'name', age: 1 };
type PerTypeof = typeof person; // typeof后接具体对象
const per2: PerTypeof = { name: 'name', age: 1 };
// 用法1: 根据联合类型创建新类型
type PropKeys = 'x' | 'y' | 'z'; // const a: PropKeys = 'x';
// 等价于{x:string;y:string;z:string} 三个属性都包含
type types = { [key in PropKeys]: string };
const typesObj: types = {x: '1',y: '1',z: '1'
};
// 用法2: 根据对象类型创建新类型
type PropsObj = { a: number; b: string; c: boolean };
type Type1 = { [key in keyof PropsObj]: PropsObj[key] };
const Type1Obj: Type1 = {a: 1,b: '1',c: true
};// 泛型工具partial是根据映射类型实现的
type MyPartial<T> = {[key in keyof T]?: T[key];
};
type MyPartialA = {name: string;age: number;phone: number;
};
const MyPartialAObj: MyPartial<MyPartialA> = {name: '1'
};
// 注意区分和in keyof的区别
const MyPartialAObj1: { [p in keyof MyPartialA]: MyPartialA[p] } = {name: '1' // 类型“{ name: string; }”缺少类型“{ name: string; age: number; phone:
};
当在公司axios严格使用ts
和后端定义好接口返回参数,使用泛型定义好核心data结构
AxiosResponse是axios返回的一个类型,带一个泛型参数T,属性有config,headers,request,status,statusText和data属性,其中data接受泛型T
// /api/index.ts
import axios, { AxiosResponse } from 'axios';
import config from '@/utils/config';
// 定义接口返回失败参数类型
interface ErrorResponse {error_code: string;error_message: string;
}// 定义接口返回成功参数类型
interface AxiosHomeResponse<T = any> {data: T;stateCode?: {code?: string;desc?: string;};statusText?: string;success?: boolean;
}
export type BaseResponse<T> = Promise<AxiosResponse<T>>;// 封装接口返回参数类型
export type HomeResponse<T> = BaseResponse<AxiosHomeResponse<T> & ErrorResponse>;
/*** 设置全局配置*/
axios.defaults.withCredentials = true;
axios.defaults.validateStatus = (status: number) => {return status >= 200 && status < 599;
};export const createAxios = (baseURL: string) => {const instance = axios.create({ baseURL });instance.interceptors.request.use((config) => {if (config.method?.toLocaleLowerCase() === 'get') {config.params = { ...config.params, _: Date.now() };}return config;},(error) => {// 对请求错误做些什么return Promise.reject(error);});instance.interceptors.response.use((response) => {// 对响应数据做点什么switch (response.status) {case 401:// 跳转登陆页面break;}return response;},(error) => {// 对响应错误做点什么if (error.response && error.response.data) {// 弹出统一错误提示}return Promise.reject(error);});return instance;
};// test接口
/*** url: http://localhost:3001/api* 不同环境的url可以抽离到config下的配置文件 todo...* 不同模块的请求域名可以各自配置*/
export const homeApi = createAxios('http://localhost:3001/api');
在文件夹api中分模块定义请求接口和ts类型
// /api/home/index.ts
import { homeApi, HomeResponse } from '..';
import * as Types from './type';// 拿到接口返回的res就有ts类型提示了
export const getHome = (params: Types.IHomeParams): HomeResponse<Types.IHomeRes[]> => {return homeApi.post('/home', { params });
};
// /api/home/type.ts
export interface IHomeParams {id: number;
}export interface IHomeRes extends IHomeParams {msg: string;
}
在请求结果中就会有对应的提示了


相关文章:
ts总结一下
ts基础应用 /*** 泛型工具类型*/ interface IProps {id: string;title: string;children: number[]; } type omita Omit<IProps, id | title>; const omitaA: omita {children: [1] }; type picka Pick<IProps, id | title>; const pickaA: picka {id: ,title…...
MySQL数据库笔记——主从复制
大家好,这里是Good Note,关注 公主号:Goodnote,本文详细介绍 MySQL的主从复制,从原理到配置再到同步过程。 文章目录 简介核心组件主从复制的原理作用主从复制的线程模型主从复制的模式形式复制的方式设计复制机制主从…...
OpenAI发布o3:圣诞前夜的AI惊喜,颠覆性突破还是技术焦虑?
每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...
欧拉-伯努利梁自由波动的频散关系
梁和杆都是一维结构,但是梁的弯曲波比杆的纵波要复杂多。例如即使最简单的欧拉-伯努利(Euler-Bernoulli)梁的弯曲波也具有频散特征,且当梁的特征尺寸和弯曲波波长满足某个比值时,欧拉-伯努利梁不再适用,需要引入铁摩辛克(Timoshenko)梁模型。 考察某一欧拉-伯努利梁,长度…...
Cursor小试1.生成一个网页的接口请求工具
一般开发过程中,会涉及到接口的调试,往往有时候开发的电脑不是我们自己的,没有安装一些类似postman 的接口调用工具,所以发现问题或者要测试某些接口是否正常的时候会很麻烦,而且现在网上也没有找到很好的免费的网页端接口请求的网址,所以我们使用Cursor来编写这样一个小工具, …...
Xilinx DCI技术
Xilinx DCI技术 DCI技术概述Xilinx DCI技术实际使用某些Bank特殊DCI要求 DCI级联技术DCI端接方式阻抗控制驱动器(源端接)半阻抗控制阻抗驱动器(源端接)分体式DCI(戴维宁等效端接到VCCO/2)DCI和三态DCI&…...
Kubernetes Pod 优雅关闭:如何让容器平稳“退休”?
Kubernetes Pod 优雅关闭:如何让容器平稳“退休”? 在 Kubernetes 中,Pod 是应用的基本单元。你可能会遇到需要停止某个 Pod 或容器的情况,可能是因为要更新、调整或故障恢复。在这种情况下,Pod 的优雅关闭࿰…...
鸿蒙应用开发(1)
可能以为通过 鸿蒙应用开发启航计划(点我去看上一节) 的内容,就足够了,其实还没有。 可是我还是要告诉你,你还需要学习新的语言 -- ArkTS。 ,ArkTS是HUAWEI开发的程序语言。你需要学习这门语言。这会花费你…...
SimForge HSF 案例分享|复杂仿真应用定制——UAVSim无人机仿真APP(技术篇)
导读 「神工坊」核心技术——「SimForge HSF高性能数值模拟引擎」支持工程计算应用的快速开发、自动并行,以及多域耦合、AI求解加速,目前已实现航发整机数值模拟等多个系统级高保真数值模拟应用落地,支持10亿阶、100w核心量级的高效求解。其低…...
使用 Adaptive Mesh Refinement 加速 CFD 仿真:最佳实践
CFD 仿真中的网格划分挑战 技术的进步正在增强设计探索,数值仿真在优化工程设计方面发挥着至关重要的作用。通常,计算流体动力学 (CFD) 仿真从定制的手工网格开始,具有精细和粗糙的区域,以平衡分辨率和单元…...
前端-动画库Lottie 3分钟学会使用
目录 1. Lottie地址 2. 使用html实操 3. 也可以选择其他的语言 1. Lottie地址 LottieFiles: Download Free lightweight animations for website & apps.Effortlessly bring the smallest, free, ready-to-use motion graphics for the web, app, social, and designs.…...
智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之5
本文要点 前端 问题描述语言 本文继续完善 “描述” ---现在我们应该可以将它称为 “问题problem描述语言 ”。 它 通过对话框的question 引发 表征的issue 的“涌现” 最终 厘清应用程序的“problem”。即它合并了 ISO七层模型中的上面三层,通过将三层 分别形成…...
java web
流程 1.浏览器发送http协议的格式数据和url给服务器软件tomcat 2.浏览器解析http格式数据并创建request和response对象,把数据封装到request对象里。 3.tomcat解析url确定访问路径,如果是静态资源html等,直接将html数据作为http格式响应体返回&#x…...
【嵌入式软件开发】嵌入式软件计时逻辑的两种实现:累加与递减的深入对比
本文主要从四个方面详细阐述了嵌入式软件编程中计时逻辑的两种实现方式:累加和递减。让我为您详细解析各个部分: 1. 基本概念对比 累加方式 从0开始向上计数每个周期增加固定值(通常为1)类似于我们日常生活中的秒表计时方式递减方式 从预设值开始向下计数每个周期减少固定…...
如何将vCenter6.7升级7.0?
vCenter是什么? vCenter是一种虚拟化管理软件,由VMware公司开发和发布。它是VMware vSphere虚拟化平台的核心组件之一,主要用于集中管理和监控虚拟化环境中的虚拟机、虚拟存储和网络资源。vCenter可以实现对多个ESXi主机的集中管理ÿ…...
服务器网卡绑定mode和交换机的对应关系
互联网各领域资料分享专区(不定期更新): Sheet 模式类别 网卡绑定mode共有七种(0~6): bond0、bond1、bond2、bond3、bond4、bond5、bond6 mode详解 mode0 ,即:(balance-rr) Round-robin policy(平衡轮循环策略,需要配置交换机静态聚合) mode…...
Maven (day04)
什么是maven? Maven 是 Apache 旗下的一个开源项目,是一款用于管理和构建 java 项目的工具。 官网:Welcome to Apache Maven – Maven https://maven.apache.org/ Maven的作用 依赖管理(方便快捷的管理项目依赖的资源(jar包)ÿ…...
Echart实现3D饼图示例
在可视化项目中,很多地方会遇见图表;echart是最常见的;这个示例就是用Echart, echart-gl实现3D饼图效果,复制即可用 //需要安装,再引用依赖import * as echarts from "echarts"; import echar…...
UE5 Debug的一些心得
1、BUG粗略可分为两类: 一种是显性的,编译直接就通不过,必须马上解决。 第二种是隐性的,新功能完成后,编译成功顺利运行,洋洋自得,而问题隐藏在幕后,测试之后才逐渐发现有问题&…...
java中多线程的一些常见操作
Java 中的多线程是通过并发编程来提高应用程序的效率和响应速度。Java 提供了多个机制和类来支持多线程编程,包括继承 Thread 类、实现 Runnable 接口、使用线程池等。以下是 Java 中一些常见的多线程操作和应用场景。 1. 创建线程 1.1 通过继承 Thread 类创建线程…...
实战Wireshark抓包分析与Python爬虫技术入门
1. Wireshark抓包实战:从零开始分析网络通信 第一次接触Wireshark时,我被这个能"偷看"网络流量的工具震撼到了。想象一下,你家的Wi-Fi就像一条繁忙的高速公路,而Wireshark就是路边的监控摄像头,能记录每一辆…...
3个核心技巧:快速掌握Blender 3MF插件的完整工作流
3个核心技巧:快速掌握Blender 3MF插件的完整工作流 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 你是否在为3D打印工作流中的文件格式转换烦恼?…...
Elsevier Tracker:科研投稿状态追踪的自动化解决方案
Elsevier Tracker:科研投稿状态追踪的自动化解决方案 【免费下载链接】Elsevier-Tracker 项目地址: https://gitcode.com/gh_mirrors/el/Elsevier-Tracker 在学术出版流程中,论文投稿后的状态监控一直是科研人员面临的重要挑战。传统的人工查询方…...
网络安全培训资源awesome-osint:OSINT视频教程与博客指南
网络安全培训资源awesome-osint:OSINT视频教程与博客指南 开源情报(OSINT)是网络安全领域的重要技能,通过公开可用的信息源收集情报。对于网络安全新手和从业者来说,找到高质量的OSINT培训资源至关重要。awesome-osin…...
保姆级教学:FLUX.1文生图+SDXL Prompt风格,从环境准备到图片生成的完整流程
保姆级教学:FLUX.1文生图SDXL Prompt风格,从环境准备到图片生成的完整流程 你是否曾经遇到过这样的困扰:明明输入了详细的描述词,但生成的图片却与预期相差甚远?或者尝试混合多种风格时,结果变得不伦不类&…...
SEO 竞价推广的投放策略有哪些
SEO 竞价推广的投放策略有哪些 在当今竞争激烈的市场环境中,SEO(搜索引擎优化)竞价推广已经成为企业获取高质量流量的重要手段。在实施SEO竞价推广时,有哪些有效的投放策略可以帮助企业最大化其广告效果?本文将从问题…...
忍者像素绘卷惊艳效果展示:鸣人螺旋丸像素绘卷作品集
忍者像素绘卷惊艳效果展示:鸣人螺旋丸像素绘卷作品集 1. 像素艺术新纪元:忍者世界的视觉革命 当传统漫画遇上16-bit复古美学,忍者像素绘卷为我们打开了一扇通往全新视觉体验的大门。这款基于Z-Image-Turbo深度优化的图像生成工作站…...
Graphormer保姆级教学:Supervisor配置文件(graphormer.conf)逐行注释
Graphormer保姆级教学:Supervisor配置文件(graphormer.conf)逐行注释 1. Graphormer简介 Graphormer是一种基于纯Transformer架构的图神经网络,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计…...
Air8101:低功耗-WiFi-UI_SoC模组介绍
一、模组概述 Air8101 是高性能 WiFi SoC 模组,支持2.4G WiFi6与BLE 5.4双模通信,兼容DVP/UVC摄像头接口,可实现200W像素拍照、100W像素录像(支持H.264编码及RTMP推流),搭载LuatOS,降低二次开发…...
突破网盘下载瓶颈:技术工具革新文件获取效率
突破网盘下载瓶颈:技术工具革新文件获取效率 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅…...
