ts-01.泛型(函数和接口)

news2024/10/6 6:11:48

泛型

泛的意思是:漂浮, 比如泛舟; 泛型: 类型漂浮未定 => 动态类型. 用于: 函数 接口 类

T extends string | number 泛型约束



function a<T = any, K> (: number, value: T) { // 泛型参数设置默认值any
	const arr = Array<T>(l).fill(value) // ['foo', 'foo', 'foo]
}
const res = a<string>(3, 'foo');// 使用的时候再传入类型, 也可不传, ts编译器做类型推论

function getLength<T extends string | any[]>(a: T): number{
	return a.length
}

interface iLength
T extends iLength

泛型工具类

let obj: Partial<T> = 

函数

  1. 函数参数可以设置默认值是es6语法, 可选值 ? 是ts语法
  2. 函数有了默认值, 就不能设置可选了. 设置了可选也不能设置默认值.
function fn(x = 'zml',y?){  // 编译成 js 就没有?了
	console.log(x,y)
}
fn()  // zml undefined
fn('ymy',1) // ymy 1

function sum(x: number, y?: number, ...res: number[]): number {
    return x + y;
}
// 函数表达式
let mySum: (x: number, y: number) => number =  function () {}
let mySum = function(x: number, y:number):number{ // 前后都限定感觉麻烦, 倾向于这样写.
}
// 

函数重载的意思是, 重新传不同类型的参数, java里面两个同名函数, 传参类型不同, 就是重载 js 本身是没函数重载的

function reverse(x: number): number;
function reverse(x: string): string;
function revsrse(x: number | string): number | string {
	if(typeof x === 'number') {
		return Number(String(x).split('').reverse().join(''))
	} else if(typeof x === 'string) {
		return x.split('').reverse().join('')
	}
}

在这里插入图片描述

let a: (a:string,b:number) => boolean= (c, b) => {
        return c.length > b ? true : false
}
a('abc', 2)
ts 的函数表达式的写法觉得好冗余, 就像下面这种
   let a:(e:string, f:number)=>boolean = (a: string, b: number): boolean => {
   return a.length > b ? true : false
}
interface Crazy {
    new(): { // 这种怎么理解,new执行是这个
        hello: number;
    };
}
class CrazyClass implements Crazy {
    constructor() {
        return { hello: 123 };
    }
}

// Because
const crazy = new CrazyClass(); // crazy would be { hello:123 }
console.log(crazy)

泛型接口函数

interface GenericIdentityFn {
    <T>(arg: T): T;
}
let g:GenericIdentityFn = function<T>(b: T):T {
  return b
}  // 实现接口

interface GenericIdentityFn<T, K> {
   (arg: T): T
   commonets: K[]
}


接口可以多继承, 同样接口也可以多合并, 也就是写多个名字
interface iPerson extends iPerson2, iPerson3 {
  name: string
}
interface iPerson2{
  age: number
}
interface iPerson3{
  gender: 'male' | 'female'
}

let p:iPerson  = {
  name: 'mingle',
  age: 34,
  gender:'male'
}

搭配axios


// 请求接口数据
interface ResponseData<T> {
    code: number;
    result: T[] | null; //  Array<T>
}

let a: ResponseData<string> = {
    code: 1,
    result: ['a'],
}
let b: ResponseData<null> = {
    code: 1,
    result: null
}
// 在 axios.ts 文件中对 axios 进行了处理,例如添加通用配置、拦截器等
import Ax from './axios';
import { ResponseData } from './interface.ts';

export function getUser<T>() {
  return Ax.get<ResponseData<T>>('/somepath') // ??
    .then(res => res.data)
    .catch(err => console.error(err));
}
const obj: { name: string } = { name: 'zhangmingle' } // 有了这种内联注解, 为什么还要用接口?

接口用来约定对象的结构. 不用逗号,分号
interface Person {  有的建议加I 为啥不加小写i???
    readonly id: number  只读
    age?: number  可选
    [prop : string]: any 可以添加任意数量的其它属性了, 类的话不用添加, 也能自己扩展 其他的类型需要是它的子集
	run(): void
	mover():void
}
interface A{
	name: string
}
interface A{
	age: 12
} // 声明合并
class Person implements A { //  类实现接口,可增加
}
class A implements B,C{} // 可多个
class P<T>{
	name: T;
	constructor(name: T) {}
}
接口和type类似, 不同的是接口还可以限制类.

有必要用接口数组?

interface iPerson {
        [i: number]: string
    }
    let man: iPerson = ['s', '']

在这里插入图片描述

接口继承和接口合并有啥区别- 没啥区别

  1. 写两个同名的接口会合并??
    在这里插入图片描述

接口限制的比较严格啊
在这里插入图片描述

参考

深入理解typescript
2022年了,我才开始学 typescript ,晚吗?
typescript中文网
深入理解typescript
ts中的泛型与axios的一次相遇

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IntelliJ IDEA菜单不见了设置找回方法

通过CtrAltS键按出设置 找到View,然后自定义一个快捷键,然后保存 使用自定义快捷键弹出改界面,点击Main Menu即可

树莓派4B_OpenCv学习笔记19:OpenCV舵机云台物体追踪

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1&#xff1a; Python 版本3.7.3&#xff1a; ​​ 今日学习&#xff1…

# 三 JS的流程控制和函数

三 JS的流程控制和函数 3.1 JS分支结构 if结构 这里的if结构几乎和JAVA中的一样,需要注意的是 if()中的非空字符串会被认为是trueif()中的非零数字会被认为是true 代码 if(false){// 非空字符串 if判断为trueconsole.log(true) }else{console.log(false) } if(){// 长度为0…

Linux系统(Centos)下MySQL数据库中文乱码问题解决

问题描述&#xff1a;在进行数据库使用过程中&#xff0c;数据库里的数据中文都显示乱码。操作数据库的时候&#xff0c;会出现中文乱码问题。 解决方法如下&#xff1a; 第一步&#xff1a;打开虚拟机进入系统&#xff0c;启动MySQL。 第二步&#xff1a;连接登录MySQL输入…

排序 -- 万能测试oj

. - 力扣&#xff08;LeetCode&#xff09; 这道题我们可以使用我们学过的那些常见的排序方法来进行解答 //插入排序 void InsertSort(int* nums, int n) {for (int i 0; i < n-1; i){int end i;int tmp nums[end 1];while (end > 0){if (tmp < nums[end]){nums[…

GuitarPro2024音乐软件#创作神器#音乐梦想

嘿&#xff0c;亲爱的朋友们&#xff01;&#x1f44b;&#x1f44b;&#x1f44b;今天我要给你们安利一款超赞的软件——Guitar Pro。这款软件简直是吉他手的福音啊&#xff01;&#x1f389;&#x1f389;&#x1f389; Guitar Pro免费绿色永久安装包下载&#xff1a;&#…

数据结构(其一)--基础知识篇

1. 数据结构三要素 1.1 数据结构的运算 即&#xff0c;增删改查 1.2 数据结构的存储结构 2. 数据类型&#xff0c;抽象数据类型 数据类型&#xff1a; &#xff08;1&#xff09;. 原子类型&#xff1a;bool、int... &#xff08;2&#xff09;. 结构类型&#xff1a;类、…

赤壁之战的烽火台 - 观察者模式

“当烽火连三月&#xff0c;家书抵万金&#xff1b;设计模式得其法&#xff0c;千军如一心。” 在波澜壮阔的三国历史长河中&#xff0c;赤壁之战无疑是一场改变乾坤的重要战役。而在这场战役中&#xff0c;一个看似简单却至关重要的系统发挥了巨大作用——烽火台。这个古老的…

LeetCode 算法:二叉树中的最大路径和 c++

原题链接&#x1f517;&#xff1a;二叉树中的最大路径和 难度&#xff1a;困难⭐️⭐️⭐️ 题目 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点&#xff0c;…

赋值运算符重载和const成员函数和 const函数

文章目录 1.运算符重载(1)(2)运算符重载的语法&#xff1a;(3)运算符重载的注意事项&#xff1a;(4)前置和后置重载区别 2.const成员函数3.取地址及const取地址操作符重载4.总结 1.运算符重载 (1) 我们知道内置类型(整形&#xff0c;字符型&#xff0c;浮点型…)可以进行一系…

ImportError: DLL load failed while importing _imaging: 操作系统无法运行 %1

解决方案&#xff1a; &#xff08;1&#xff09;搜索打开Anaconda Prompt控制台&#xff0c;进入到自己要安装的环境下面去&#xff0c;卸载Pillow:pip uninstall Pillow 没有安装Pillow的就不用卸载&#xff0c;直接安装&#xff0c; &#xff08;2&#xff09;然后再安装&a…

入门PHP就来我这(高级)13 ~ 图书添加功能

有胆量你就来跟着路老师卷起来&#xff01; -- 纯干货&#xff0c;技术知识分享 路老师给大家分享PHP语言的知识了&#xff0c;旨在想让大家入门PHP&#xff0c;并深入了解PHP语言。 今天给大家接着上篇文章编写图书添加功能。 1 添加页面 创建add.html页面样式&#xff0c;废…

实验2 Aprori关联挖掘算法

目 录 一、实验目的... 1 二、实验环境... 1 三、实验内容... 1 3.1 connect_string()函数解析... 1 3.2 find_rule()函数解析纠错... 2 3.3 关联规则挖掘... 4 四、心得体会... 7 一、实验目的 &#xff08;1&#xff09;理解Aprori关联挖掘算法的程序编写&#xff1b; &…

《ClipCap》论文笔记(上)

原文出处 [2111.09734] ClipCap: CLIP Prefix for Image Captioning (arxiv.org) 原文笔记 What ClipCap&#xff1a; CLIP Prefix for Image Captioning 一言以蔽之&#xff1a;使用 CLIP 编码作为标题的前缀&#xff0c;使用简单的映射网络&#xff0c;然后微调语言模型…

EN-SLAM:Implicit Event-RGBD Neural SLAM解读

论文路径&#xff1a;https://arxiv.org/pdf/2311.11013.pdf 目录 1 论文背景 2 论文概述 2.1 神经辐射场&#xff08;NeRF&#xff09; 2.2 事件相机&#xff08;Event Camera&#xff09; 2.3 事件时间聚合优化策略&#xff08;ETA&#xff09; 2.4 可微分的CRF渲染技术…

Netty 启动源码阅读

文章目录 1. 入门2. Netty 代码实例3. Netty bind3.1 initAndRegister3.1.1 newChannel, 创建 NioServerSocketChannel3.1.2 init(channel); 初始化 NioServerSocketChannel3.1.3 register 注册channel 3.2 doBind0 绑定端口3.3 ServerBootstrapAcceptor 1. 入门 主从Reactor模…

不是哥们?你怎么抖成这样了?求你进来学学防抖吧!全方位深入剖析防抖的奥秘

前言 古有猴哥三打白骨精&#xff0c;白骨精 > 噶 今有用户疯狂点请求&#xff0c;服务器 > 噶 所以这防抖咱必须得学会&#xff01;&#xff01;&#xff01; 本文就来讲解一下Web前端中防抖的奥秘吧&#xff01;&#xff01;&#xff01;&#xff01; 为什么要做防…

2-27 基于matlab的一种混凝土骨料三维随机投放模型

基于matlab的一种混凝土骨料三维随机投放模型&#xff0c;为混凝土细观力学研究提供一种快捷的三维建模源代码。可设置骨料数量&#xff0c;边界距离、骨料大小等参数。程序已调通&#xff0c;可直接运行。 2-27 matlab 混凝土骨料三维随机投放模型 - 小红书 (xiaohongshu.com)…

盘点8款国内顶尖局域网监控软件(2024年国产局域网监控软件排名)

局域网监控软件对于企业网络管理至关重要&#xff0c;它们可以帮助IT部门维护网络安全&#xff0c;优化网络性能&#xff0c;同时监控和控制内部员工的网络使用行为。以下是八款备受推崇的局域网监控软件&#xff0c;每一款都有其独特的优势和适用场景。 1.安企神软件 试用版领…

CompletionService

必备知识&#xff1a; 三种创建线程的方式 java线程池 CompletionService是Java并发库中的一个接口&#xff0c;用于简化处理一组异步任务的执行和结果收集。它结合了Executor和BlockingQueue的功能&#xff0c;帮助管理任务的提交和完成。CompletionService的主要实现类是Exe…