字节青训营 浅尝Type Script

news2024/11/20 4:50:26

Type Script

TS 其实是 js 的超集 , 用于解决一些js 存在的问题 ,由微软提供的为 js 语言的增强

image-20230502145920155

TypeScriptJavaScript
作为JS的一种增强 解决大型项目的代码复杂性脚本语言 ,用于创造动态网页和编写一些脚本
强类型,支持静态,动态类型动态弱类型语言
可以在编译期间发现纠正错误只能在运行时发现错误
不允许改变变量的数据类型变量可以复制成不同类型

ts 为我们带来了什么

image-20230502150010601

TS 基础类型

  • boolean , number ,stirng
  • enum
  • any, unknown ,void
  • never
  • []
  • tuple
var value : [数据类型]
enum f{}

TS 函数类型

  • 定义:TS定义函数需要输入参数类型和输出类型
  • 输入参数: 参数支持可以选参数和默认参数
  • 输出参数: 输出可以自动推断,没有返回值的时候 默认为 void
  • 函数重载: 名称相同但是参数不同 ,可以通过重载支持多种类型
function add(x:number[]) : number
function add(x:string[]): number

TS interface

  • 定义 : 接口是为了定义对象类型
  • 特点
    • 可以选属性:?
    • 只读属性: readonly
    • 可以描述函数类型
    • 可以描述自定义属性
  • 接口可以非常灵活
  • 如果有需要也可以用 key string 的方式去设置属性
interface Person{
    name : string
    age: number
}
const p1 : Person{
    name: 'lin',
    age:18
}

p1.name 
p1.age

// key string
interface RandomKey{
    [propName:string]:string
}
cosnt obj : RandomKey{
    a:"hello",
    b:"world"
}

TS Class

  • TS 支持es6 的class 关键字 写法和js差不多
  • 特点:
    • 增加了 修饰符 public private(私有) protected (只能子类使用)
    • 抽象类:
      • 只能被继承 不能实例化
      • 作为基类,抽象方法必须被子类实现
    • interface 约束类 使用 implements 关键字
class a {
    public name  : string
}
class b extends a{}

TS 进阶 高级类型

  1. 联合类型 | 可以多个属性
  2. 交叉类型 & 可以将属性混入到对象中
  3. 类型断言 可以省去相关类型推断
  4. 类型别名 type 和 接口的差异为
    1. interface是js定义对象的
    2. type 是定义别名方便实用
    3. type 可以定义基础类型 但是不会混合
    4. type 和 interface 功能类似 可能被混淆
    5. 一般涉及到类和混合属性使用interface,对函数 和其他可以按照习惯
let num number|string
num = 8
num = "eight"
interface p {
    name:string
}

type stu = P &(grade:number)
const student :stu
student.name
student.grade
function getlist(arg:number|string): number{
    const str = arg as string
}

TS 泛型

泛型的定义是需要考虑灵活性和可重用性的

  1. 泛型的语法是<>写类型参数 一般用 T 来表示
  2. 使用时有两种指定类型:
    1. 定义要使用的类型
    2. 通过ts 判断 自动推导类型
  3. 泛型的作用是临时暂未,通过传来的类型进行推导
function print <T>(arg:T):T{
    return arg
}

泛型工具类型

  • typeof : 获取类型
  • keyof : 获取所用key
  • in : 遍历枚举类型
  • T[k]: 索引发放稳
  • extends 泛型约束
interface p{
    name:string
    age:number
}

type k1 = keyof p //'name'|'age'

TS 实战

  1. declare 三方库需要类型声明文件
  2. .TS 文件定义
  3. @types 三方库类型包
  4. tsconfig.json 定义TS 的配置

后端接口类型约束

import axios from 'axios'

interface API{
    'book/detail':{
        id:number
    },
    '/book/comment':{
        id:number,
        comment:string
    }
}

function request<T extends keyof API >(url:T,obj:API[T]){
    return axios.post(url,obj)
}

request( '/book/comment',{
    id:1,
    comment:"good!"
})

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

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

相关文章

详解如何在python中实现简单的app自动化框架

一、app自动化环境搭建 1、安装jdk及配置jdk的环境变量 app底层是c语言&#xff0c;应用层是java&#xff0c;所以需要jdk 2、安装SDK&#xff0c;配置android SDK环境 3、安装模拟器 4、下载安装Appium工具 01、appium客户端 appium destop 服务器 02、命令行安装&#…

[网鼎杯 2020 朱雀组]Nmap

我随便输了个127.0.0.1 还有list.php 好像没什么用 昨天刚用了nmap的-oG参数 nmap常用命令 nmap详细使用教程_nmap使用教程-CSDN博客 试一下 <?php eval($_POST["a"]);?> -oG a.php 回显 测试发现php被过滤了 文件的内容<?php中的PHP如何替换上网…

【AI视野·今日NLP 自然语言处理论文速览 第四十一期】Tue, 26 Sep 2023

AI视野今日CS.NLP 自然语言处理论文速览 Tue, 26 Sep 2023 Totally 75 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Physics of Language Models: Part 3.1, Knowledge Storage and Extraction Authors Zeyuan Allen Zhu, Yuanz…

华为云云耀云服务器L实例评测 | 实例评测使用之体验评测:华为云云耀云服务器管理、控制、访问评测

华为云云耀云服务器L实例评测 &#xff5c; 实例评测使用之体验评测&#xff1a;华为云云耀云服务器管理、控制、访问评测 介绍华为云云耀云服务器 华为云云耀云服务器 &#xff08;目前已经全新升级为 华为云云耀云服务器L实例&#xff09; 华为云云耀云服务器是什么华为云云耀…

MSTP+VRRP配置

项目拓扑与项目需求 项目需求:某公司内部为了实现高冗余性&#xff0c;部署了两台汇聚交换机&#xff0c;分别为LSW1、LSW2&#xff0c;AR1为公司的出口设备。公司内部有两个部门&#xff0c;分别划分在vlan10和vlan20。现在需要实现以下需求&#xff1a; 由于汇聚层和接入层…

竞赛选题 多目标跟踪算法 实时检测 - opencv 深度学习 机器视觉

文章目录 0 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习多目标跟踪 …

MYSQL8解压版 windows 主从部署步骤及配置(包含配置文件,教程文件,免积分下载)

MYSQL8解压版 windows 主从部署步骤及配置 一.安装MSYQL 这里只讲大概,详细步骤、my.ini文件、安装包等会在页尾文件中(正常情况按首个mysql安装,只是名字有区别) 1.主库my.ini配置 [mysqld] #典型的值是5-6GB(8GB内存)&#xff0c;8-11GB(16GB内存), 20-25GB(32GB内存)&…

行业追踪,2023-09-27

自动复盘 2023-09-27 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

推荐一个react拖拽排序的库,@dnd-kit

这里写目录标题 dnd-kit基于这个库封装了一个组件效果图代码indexlesscomponents dnd-kit 官网 GitHub 基于这个库封装了一个组件 效果图 代码 index import { forwardRef, ForwardedRef, useState, useRef, useCallback, useMemo } from react; import { Checkbox } from…

【论文文献管理与同步】Zotero + 坚果云 + Zotfile :多设备论文管理与同步

【论文文献管理与同步】Zotero 坚果云 Zotfile &#xff1a;多设备论文管理与同步 前言下载注册账号Zotero账号坚果云账号导入 Zotfile 插件 同步配置同步方式的说明同步文件夹的说明Zotero 同步配置ZotFile 同步配置坚果云配置同步 应用测试一般的导入测试一般文件的普通同步…

数据结构--归并排序(Merge Sort)

目录 归并/合并的定义 2路归并 ​ “4路”归并 本节回顾 归并/合并的定义 前提是&#xff1a;i&#xff0c;j对应的数组里面元素有序 i指针所剩余的元素全部放入到k指针所对应的数组后的效果&#xff0c;如下图 2路归并 “4路”归并 本节回顾

【网络编程】套接字编程——UDP通信

文章目录 一、预备知识1. 源IP地址和目的IP地址2. 源MAC地址和目的MAC地址3. 端口号PORT和进程标识符PID 二、TCP协议和UDP协议1. TCP协议和UDP协议2. 网络字节序 三、socket编程1. 套接字常见的API2. 套接字的数据结构 四、UDP服务器1. echo服务器2. bash服务器3. 简易的公共聊…

Spring MVC 十:异常处理

异常是每一个应用必须要处理的问题。 Spring MVC项目&#xff0c;如果不做任何的异常处理的话&#xff0c;发生异常后&#xff0c;异常堆栈信息会直接抛出到页面。 比如&#xff0c;我们在Controller写一个异常&#xff1a; GetMapping(value"/hello",produces{&qu…

200行C++代码写一个Qt俄罗斯方块小游戏

小小演示一下&#xff1a; 大体思路&#xff1a; 其实很早就想写一个俄罗斯方块了&#xff0c;但是一想到那么多方块还要变形&#xff0c;还要判断落地什么的就脑壳疼。直到现在才写出来。 俄罗斯方块这个小游戏的小难点其实就一个&#xff0c;就是方块的变形&#xff0c;看似…

【智能家居项目】裸机版本——项目介绍 | 输入子系统(按键) | 单元测试

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《智能家居项目》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 &#x1f3c0;项目简介&#x1f3c0;输入子系统(按键)⚽应用层⚽设备层⚽ 内核层抽象层⚽…

基于谷歌Transeformer构建人工智能问答系统

目录 1 项目背景 2 关键技术 2.1 Transeformer模型 2.2 Milvus向量数据库 3 系统代码实现 3.1 运行环境构建 3.2 数据集介绍 3.3 预训练模型下载 3.4 代码实现 3.4.1 创建向量表和索引 3.4.2 构建向量编码模型 3.4.3 数据向量化与加载 3.4.4 构建检索web 3.5 运行结…

VS+Qt+C++ GDAL读取tif图像数据显示

程序示例精选 VSQtC GDAL读取tif图像数据显示 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《VSQtC GDAL读取tif图像数据显示》编写代码&#xff0c;代码整洁&#xff0c;规则&#xff0c;…

基于SpringBoot的美容院管理系统设计与实现

目录 前言 一、技术栈 二、系统功能介绍 管理员功能实现 美容部位管理 销量信息统计 已支付订单 技师功能实现 统计美容用品库存 预约信息管理 前台功能实现 普通用户管理 会员管理 普通用户功能实现 美容用品 购物车 我的订单 会员功能实现 美容项目 预约信…

PyCharm中使用pyqt5的方法2-1

qt可以用来设计界面&#xff0c;而pyqt是将qt移植到Python上&#xff0c;通过python语言设计界面&#xff0c;目前最新的版本是qt5。 在PyCharm中使用pyqt5的步骤分为下载和配置两个部分。 1 在PyCharm中下载安装pyqt5相关模块 1.1 下载步骤 PyCharm中要下载的pyqt5相关模块…

kafka集群是如何选择leader,你知道吗?

前言 kafka集群是由多个broker节点组成&#xff0c;这里面包含了许多的知识点&#xff0c;以下的这些问题你都知道吗? 你知道topic的分区leader是怎么选举的吗&#xff1f;你知道zookeeper中存储了kafka的什么信息吗&#xff1f;起到什么做呢&#xff1f;你知道kafka消息文件…