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;
}

在请求结果中就会有对应的提示了
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/947010.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人脑处理信息的速度与效率:超越计算机的直观判断能力

人脑处理信息的速度与效率&#xff1a;超越计算机的直观判断能力 关键词&#xff1a; #人脑信息处理 Human Brain Information Processing #并行处理 Parallel Processing #视觉信息分析 Visual Information Analysis #决策速度 Decision Speed #计算机与人脑比较 Computer v…

CentOS — 目录管理

文章目录 一、目录结构二、切换目录三、查看目录四、创建目录五、复制目录六、剪切目录七、删除目录 目录也是一种文件。 蓝色目录&#xff0c;绿色可执行文件&#xff0c;红色压缩文件&#xff0c;浅蓝色链接文件&#xff0c;灰色其它文件&#xff0c; 点开头的是隐藏文件&…

cursor设备ID修改器,你可以无限试用cursor了!

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…

springboot523基于Spring Boot的大学校园生活信息平台的设计与实现(论文+源码)_kaic

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本大学校园生活信息平台就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…

RabbitMQ中的异步Confirm模式:提升消息可靠性的利器

在现代分布式系统中&#xff0c;消息队列&#xff08;Message Queue&#xff09;扮演着至关重要的角色&#xff0c;它能够解耦系统组件、提高系统的可扩展性和可靠性。RabbitMQ作为一款广泛使用的消息队列中间件&#xff0c;提供了多种机制来确保消息的可靠传递。其中&#xff…

集线器,交换机,路由器,mac地址和ip地址知识记录总结

一篇很不错的视频简介 基本功能 从使用方面来说&#xff0c;都是为了网络传输的标识&#xff0c;和机器确定访问对象 集线器、交换机和路由器 常听到路由器和集线器&#xff0c;下面是区别&#xff1a; 集线器 集线器&#xff1a;一个简单的物理扩展接口数量的物理硬件。…

什么是 GPT?Transformer 工作原理的动画展示

大家读完觉得有意义记得关注和点赞&#xff01;&#xff01;&#xff01; 目录 1 图解 “Generative Pre-trained Transformer”&#xff08;GPT&#xff09; 1.1 Generative&#xff1a;生成式 1.1.1 可视化 1.1.2 生成式 vs. 判别式&#xff08;译注&#xff09; 1.2 Pr…

u3d中JSON数据处理

一.认识JSON 1.1 Json概述 JSON&#xff08;JavaScript Object Notation&#xff0c;JavaScript对象表示法&#xff09;JSON和XML是比较类似的技术&#xff0c;都是用来存储文本信息数据的&#xff1b;相对而言&#xff0c;JSON比XML体积更小巧&#xff0c;但是易读性不如XML…

Android 模拟器系统镜像选择指南

Android 模拟器系统镜像选择指南 在选择 Android 模拟器的系统镜像时&#xff0c;根据实际需求选择合适的版本。以下是具体建议&#xff1a; 1. 目标 API Level 如果需要适配最新版本的 Android&#xff1a; 选择&#xff1a;API 35 (Android 14)&#xff08;代号&#xff1…

网络分析工具-tcpdump

文章目录 前言一、tcpdump基础官网链接命令选项详解常规过滤规则tcpdump输出 一、tcpdump实践HTTP协议ICMP状态抓包 前言 当遇到网络疑难问题的时候&#xff0c;抓包是最基本的技能&#xff0c;通过抓包才能看到网络底层的问题 一、tcpdump基础 tcpdump是一个常用的网络分析工…

打造三甲医院人工智能矩阵新引擎(一):文本大模型篇--基于GPT-4o的探索

一、引言 当今时代&#xff0c;人工智能技术正以前所未有的速度蓬勃发展&#xff0c;深刻且广泛地渗透至各个领域&#xff0c;医疗行业更是这场变革的前沿阵地。在人口老龄化加剧、慢性疾病患病率上升以及人们对健康需求日益增长的大背景下&#xff0c;三甲医院作为医疗体系的核…

mysql连接时报错1130-Host ‘hostname‘ is not allowed to connect to this MySQL server

不在mysql服务器上通过ip连接服务提示1130错误怎么回事呢。这个错误是因为在数据库服务器中的mysql数据库中的user的表中没有权限。 解决方案 查询mysql库的user表指定账户的连接方式 SELECT user, host FROM mysql.user;修改指定账户的host连接方式 update mysql.user se…

linux下安装达梦数据库v8详解

目录 操作系统、数据库 1、下载达梦数据库 2、安装前准备 2.1、建立数据库用户和组 2.2、修改文件打开最大数 2.3、挂载镜像 2.4、新建安装目录 3、数据库安装 4、配置环境变量 5、初始化数据库实例 6、注册服务 7、使用数据库 8、卸载数据库 9、多实例管理 10、…

低代码引擎插件开发:开启开发的便捷与创新之路

OneCode授权演示 一、低代码引擎与插件开发的概述 在当今快节奏的软件开发领域&#xff0c;低代码引擎正逐渐崭露头角。低代码引擎旨在让开发人员能够以最少的代码量创建功能丰富的应用程序&#xff0c;而其中的关键组成部分便是插件开发。低代码引擎通过提供可视化的开发环境…

多光谱图像的处理和分析方法有哪些?

一、预处理方法 1、辐射校正&#xff1a; 目的&#xff1a;消除或减少传感器本身、大气条件以及太阳光照等因素对多光谱图像辐射亮度值的影响&#xff0c;使得图像的辐射值能够真实反映地物的反射或发射特性。 方法&#xff1a;包括传感器校正和大气校正。传感器校正主要是根…

贪心算法概述

贪心算法总是作出当前看来最好的选择&#xff0c;是局部最优 可以使用贪心算法的问题一般具有两个重要的性质 贪心选择性质最优子结构性质 贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优的选择来达到 其与动态规划的问题区别在于&#xff0c;动态规划算法通…

Git 下载问题及解决方法

在某些网络环境下&#xff0c;可能会遇到 Git 无法下载的问题&#xff0c;通常是由于网络限制或需要通过代理访问导致的。以下是常见的解决方法&#xff0c;包括设置代理、取消代理以及其他诊断方法。 1. 设置 Git 代理 在一些网络环境下&#xff0c;可能会使用工具&#xff0…

【算法刷题】数组篇

文章目录 数组中两个数的最⼤异或值找出所有⼦集的异或总和再求和 数组中两个数的最⼤异或值 leet code&#xff1a;https://leetcode.cn/problems/maximum-xor-of-two-numbers-in-an-array/description/暴力解法&#xff1a;【部分样例超时&#xff0c;通过不了&#xff0c;不…

硬件设计-关于ADS54J60的校准问题

目录 简介: 校准模分析: 交错的优势 交错挑战 S/2 fIN处产生杂散。失调不匹配杂散很容易识别,因为只有它位于fS/2处,并可轻松地进行补偿。增益、时序和带宽不匹配都会在输出频谱的fS/2 fIN 处产生杂散;因此,随之而来的问题是:如何确定它们各自的影响。图8以简单的…

python小项目:给复制出来的段落前添加星号

给复制出来的段落前添加星号 最终效果二、实现步骤2.1 编写python脚本2.2 批处理脚本2.3 运行脚本 三、用到知识3.1 pyperclip 模块 最终效果 说明&#xff1a;复制四段内容&#xff08;段落实际不做限制&#xff09;&#xff0c;在windows终端输入 bulletPointAdder&#xff0…