TypeScript由浅到深(下篇)

news2024/11/8 19:43:30

目录

七、TypeScript泛型编程

泛型实现类型参数化:

泛型接口和泛型类的使用:

泛型约束:

映射类型:

TypeScript条件类型(Conditional Types):

在条件类型中推断(inter):

分发条件类型(Distributive Conditional Types):

类型工具和类型体操:

八、TypeScript知识扩展:

TypeScript模块使用:

命名空间namespace(了解):

内置声明文件的使用 :

外部定义类型声明 – 第三方库:

外部定义类型声明 – 自定义声明:

tsconfig配置文件解析 :


七、TypeScript泛型编程

泛型实现类型参数化:

// 1.理解形参和实例参数化, 但是参数的类型是固定的
// function foo(name: string, age: number) {

// }
// foo("why", 19)
// foo("kobe", 30)


// 2.定义函数: 将传入的内容返回
// number/string/{name: string}
function bar<Type>(arg: Type): Type {
  return arg
}

// 2.1. 完整的写法
const res1 = bar<number>(123)
const res2 = bar<string>("abc")
const res3 = bar<{name: string}>({ name: "why" })

// 2.2. 省略的写法
const res4 = bar("aaaaaaaaa")
const res5 = bar(11111111)

// let message = "Hello World"

泛型接口和泛型类的使用:

泛型接口使用:

interface IKun<Type = string> {
  name: Type
  age: number
  slogan: Type
}


const kunkun: IKun<string> = {
  name: "why",
  age: 18,
  slogan: "哈哈哈"
}

const ikun2: IKun<number> = {
  name: 123,
  age: 20,
  slogan: 666
}

const ikun3: IKun = {
  name: "kobe",
  age: 30,
  slogan: "坤坤加油!"
}


export {}

泛型类的使用:

class Point<Type = number> {
  x: Type
  y: Type
  constructor(x: Type, y: Type) {
    this.x = x
    this.y = y
  }
}

const p1 = new Point(10, 20)
console.log(p1.x)
const p2 = new Point("123", "321")
console.log(p2.x)

export {}

泛型约束:

// 传入的key类型, obj当中key的其中之一
interface IKun {
  name: string
  age: number
}

type IKunKeys = keyof IKun // "name"|"age"

function getObjectProperty<O, K extends keyof O>(obj: O, key: K){
  return obj[key]
}

const info = {
  name: "why",
  age: 18,
  height: 1.88
}

const name = getObjectProperty(info, "name")

export {}

映射类型:

映射类型的基本使用:

// TypeScript提供了映射类型: 函数
// 映射类型不能使用interface定义

type MapPerson<Type> = {
  // 索引类型以此进行使用
  [property in keyof Type]: Type[property]
}


interface IPerson {
  name: string
  age: number
}


type NewPerson = MapPerson<IPerson>


export { }

映射类型修饰符和符合的使用:

type MapPerson<Type> = {
  -readonly [Property in keyof Type]-?: Type[Property]
}

interface IPerson {
  name: string
  age?: number
  readonly height: number
  address?: string
}

//原来Iperson属性有可选的也有非可选的,想要映射后变为必选属性,可在'?'前面加上'-'.readonly也是同理
type IPersonRequired = MapPerson<IPerson>

const p: IPersonRequired = {
  name: "why",
  age: 18,
  height: 1.88,
  address: "广州市"
}


export { }

TypeScript条件类型(Conditional Types):

在条件类型中推断(inter):

分发条件类型(Distributive Conditional Types):

类型工具和类型体操:

 

 

 

 

 

 

 

 

 

八、TypeScript知识扩展:

TypeScript模块使用:

// 导入的是类型, 推荐在类型的前面加上type关键
import type { IDType, IPerson } from "./utils/type"

命名空间namespace(了解):

export namespace price {
  export function format(price: string) {
    return "¥" + price
  }

  export const name = "price"
}

export namespace date {
  export function format(dateString) {
    return "2022-10-10"
  }

  const name = "date"
}


// 不要这样写export {}
import { price, date } from "./utils/format";

// 使用命名空间中的内容
price.format("1111")
date.format("22222")

内置声明文件的使用 :

类型的查找:

内置类型声明:

https://github.com/microsoft/TypeScript/tree/main/lib

内置声明的环境:

外部定义类型声明 – 第三方库:

外部定义类型声明 – 自定义声明:

declare 声明模块:

declare 声明文件 :

 

declare命名空间 :

tsconfig配置文件解析 :

认识tsconfig.json文件:

tsconfig.json配置:

tsconfig.json顶层选项:

tsconfig.json文件:

tsconfig.json是用于配置TypeScript编译时的配置选项:

TypeScript: TSConfig Reference - Docs on every TSConfig option

tsconfig.json文件:

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

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

相关文章

【Java基础】day15

day15 一、为什么需要使用多线程&#xff1f; 1、资源利用率提升&#xff0c;程序处理效率提高 2、软件运行效率提升 3、使用线程可以把占据时间长的程序中的任务放到后台去处理 4、充分利用 CPU 资源&#xff0c;多核 CPU 的情况下会更高效 二、Spring Boot 的启动流程&…

搭建个人网站没有公网IP地址可以吗?

搭建网站不一定需要公网IP地址&#xff0c;甚至都不需要云服务器或虚拟主机。可以先在本地个人电脑中搭建一个网站&#xff1b;然后网站需要为公网上的其他访客提供访问&#xff1b;所以&#xff0c;需要内网穿透&#xff0c;映射公网域名进行访问。但是完全没必要&#xff0c;…

一文了解Gralde

&#x1f3e0;个人主页&#xff1a;shark-Gao &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是shark-Gao&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f389;目前状况&#xff1a;23届毕业生&#xff0c;目前在某公司实习&#x1f…

python黑马程序员(单例模式工厂模式)笔记

一、单例模式 1、设计模式就是一种编程套路 使用特定的套路得到特定的效果 2、什么时单例设计模式 单例模式就是对一个类&#xff0c;只获取其唯一的类实例对象&#xff0c;持续复用它 节省内存 节省创建对象的开销 非单例模式效果&#xff1a; # 演示单例模式的效果 # 非…

chatgpt相关关键字

听了一堂chatgpt的课程&#xff0c;真假参半&#xff0c;但积累了一些关键词。不知道这些关键字会在什么时候起到作用&#xff0c;先记录下来作为灵感积累 1 自然进化的过程&#xff0c;是人选择工具&#xff0c;也是工具选择人 2 Copliot-自动编程&#xff0c;感觉适用于独立新…

安卓 Windows 通过ts链接获取m3u8视频地址进行视频下载

目录 环境&#xff1a; 解决思路及过程&#xff1a; .TS——> .m3u8 1.利用安卓视频缓存机制合成视频 1.1 找到鲨鱼浏览器目录 1.2 进入Android/data/com.zhijianzhuoyue.sharkbrowser/cashe 缓存目录 1.3 显示隐藏文件 1.4 进入可以看到两个随机生成的视频文件夹&…

傅盛“追风”GPT,猎户星空春天来了?

GPT的横空出世&#xff0c;让冷清已久的商用服务机器人市场&#xff0c;又有了“新故事”。 从技术底层逻辑而言&#xff0c;服务机器人受到这类新技术的影响会更为明显。因为抛开硬件&#xff0c;服务机器人的内核其实就是AI&#xff0c;GPT大模型的出现显然成了现阶段该产业进…

coreldraw2023安装教程及新功能讲解

coreldraw是一款非常好用的设计软件&#xff0c;功能非常强大&#xff0c;它可应用于商标设计、标志制作、模型绘制、插图描画、排版及分色输出等领域&#xff0c;因此受到了不少设计师的青睐&#xff0c; CorelDRAW2023新功能有哪些&#xff1f;CorelDRAW2023最新版本更新怎么…

SpringBoot-核心技术篇

技术掌握导图 六个大标题↓ 配置文件web开发数据访问单元测试指标指控原理解析 配置文件 1.文件类型 1.1、properties 同以前的properties用法 1.2、yaml 1.2.1、简介 YAML是 “YAML Aint Markup Language”&#xff08;YAML不是一种标记语言&#xff09;的递归缩写。在…

JumpServer部署与应用实践

JumpServer部署与介绍 文章目录JumpServer部署与介绍前言堡垒机功能特点主要主件一、在线安装二、环境访问三、堡垒机的应用&#xff08;重点&#xff09;3.1用户与用户组的创建3.2资产管理3.3账号管理3.4权限管理四、应用实践前言 Jumpserver 是一款使用 Python, Django 开发…

Su+ELK实现网络监测(1)——Suricata安装与配置

Suricata安装配置文档一、环境准备1. 基础环境安装2. 安装基础组件二、Luajit部署1. LuaJIT的安装2. 需要更新动态库三、suricata部署1. 安装相关依赖2. 下载、编译并安装suricata3. 执行4. 安装其他组件5. 修改配置文件6. 启动测试7. 安装suricata-update8. 更新规则集9. 启动…

Java多线程:线程组

线程组 可以把线程归属到某一个线程组中&#xff0c;线程组中可以有线程对象&#xff0c;也可以有线程组&#xff0c;组中还可以有线程&#xff0c;这样的组织结构有点类似于树的形式&#xff0c;如图所示&#xff1a; 线程组的作用是&#xff1a;可以批量管理线程或线程组对象…

从4k到42k,软件测试工程师的涨薪史,给我看哭了

清明节一过&#xff0c;盲猜大家已经无心上班&#xff0c;在数着日子准备过五一&#xff0c;但一想到银行卡里的余额……瞬间心情就不美丽了。 最近&#xff0c;2023年高校毕业生就业调查显示&#xff0c;本科毕业月平均起薪为5825元。调查一出&#xff0c;便有很多同学表示自己…

命令行打jar包

命令行打jar包前言jar --helpcvfmMANIFEST.MF压入class文件前言 每一个java开发者运行第一个java项目时都知道项目通常被打成jar包&#xff0c;这些jar包是由IDE工具打的&#xff0c;知其然不知其所以然。 jar --help 用help命令打印jar支持的所有参数&#xff0c;不做过多解…

【GPT开发】人人都能用ChatGPT4.0做Avatar虚拟人直播

0 前言 最近朋友圈以及身边很多朋友都在研究GPT开发&#xff0c;做了各种各样的小工具小Demo&#xff0c;AI工具用起来是真的香&#xff01;在他们的影响下&#xff0c;我也继续捣鼓GPT Demo&#xff0c;希望更多的开发者加入一起多多交流。 上一篇结合即时通 IM SDK捣鼓了一个…

2023mathorcup B题

已完成完整B题C题的模型代码&#xff0c;具体看文末 摘要 城市轨道交通系统作为城市出行的重要组成部分&#xff0c;对于缓解城市交通压力、提高出行效率具有重要意义。优化列车时刻表是提高运营效率、降低企业运营成本、提高乘客满意度的关键。本研究针对城市轨道交通列车时…

SAR ADC系列24:冗余设计

目录 冗余&#xff08;Redundancy&#xff09; 比较器出错&#xff1a;原因 比较器出错&#xff1a;后果 引入冗余&#xff1a;纠错 冗余&#xff1a;容错量 冗余&#xff1a;非二进制CDAC --sub二进制 冗余&#xff1a;提速 另一种冗余设计方法&#xff1a; 下面的关…

tab栏切换

效果&#xff1a; 当鼠标通过上边tab栏时&#xff0c;对应的元素变亮并切换到相应的菜单 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge…

英语学渣如何成功逆袭?聊聊我获得海外工作的真实经历

今天我想和大家分享一下作为一个英语学渣&#xff0c;我是如何成功找到一份海外工作的。希望能够给和我有相似经历的小伙伴们一些启示。以下是兴哥一个女粉丝成功逆袭的经历&#xff0c;大家可以一起旁观一下她的自白。 首先&#xff0c;让我简单介绍一下我的情况。我现在在芬…

【云原生概念和技术】1.2 云原生技术概括(上)

如果想了解或者学习云原生的友友们&#xff0c;欢迎订阅哦&#xff5e;&#x1f917;&#xff0c;目前一周三更&#xff0c;努力码字中&#x1f9d1;‍&#x1f4bb;…目前第一章是一些介绍和概念性的知识&#xff0c;可以先在脑海里有一个知识的轮廓&#xff0c;从第二章开始就…