typescript学习回顾(二)

news2024/10/6 8:32:40

今天来分享一下ts的基础,如何使用ts,以及ts具体的作用,如何去约束我们开发中常见的一些数据的,最后做一个小练习来巩固对ts基础的掌握程度。

类型约束

如何加类型约束呢

变量、函数的参数、函数的返回值位置加上:类型

比如

//约束age必须是number类型
let age:number = 18; 

//下面这个函数的意思是形参a必须是number,b必须是number,后面的:number表示返回值是number
function sum(a:number,b:number):number{
    return a + b;
}
//但是ts很多场景下都可以完成类型推导,像我们上面写了return a + b,就不需要写sum():number,它会自动推导,两个number类型的相加的结果一定是number,或者说我们不写返回值的话,它就是void,详细可以看下面的图1

//像下面这个,将1赋值给a,ts会自动推导a的类型是number,可以查看图2,我们再进行赋值就会报错,具体是图3
let a = 1;

//如果这个时候我们希望把字符串3赋值给a,ts就会提示报错,那么怎么让一个变量可以设置不同的类型值呢,可以使用:any
//:any表示可以是任意的类型,当加上了:any就不会报错了,具体是图4

图1

在这里插入图片描述

图2
在这里插入图片描述

图3
在这里插入图片描述

图4

在这里插入图片描述

基础类型

关于typescript的基本类型具体如下

  • number : 数字
  • string : 字符串
  • boolean : 布尔
  • 数组
  • object: 对象
  • null和undefined

null和undefined是所有类型的子类型,它们可以赋值给其他类型。

let n:string = null; //可以这么赋值,虽然n是string类型,但是可以设置值为null

图5

在这里插入图片描述

但是这种还是不严谨,这样也容易出一些问题,我们希望可以进行更严格的一个类型检查,我们可以通过在tsconfig.js配置文件添加strictNullChecks:true,可以获取更严格的空类型检查,null和undefined只能赋值给自身。

其他常用类型

  • 联合类型:多种类型任选其一
//这个表示name可以是string类型也可以是undefined类型
let name: string | undefined;

//如果这边通过typeof对一个联合类型进行判定,在这个代码块里面,可以使用这个类型的所有的函数,typescript会有很多丰富的智能提示
if(typeof name === "string"){
    // 类型保护
    // name.
}else{
   //
}
  • void类型:通常用于约束的返回值,表示该函数没有任何返回
function voidFunc(){
	console.log('没有返回值的函数')
}
  • never类型: 通常用于约束函数的返回值,表示该函数永远不可能结束
 function alwaysDoSomething(): never {
     while (true) {
         //...
     }
}
  • 字面量类型: 使用一个值进行约束
let gender: "男" | "女";
//这样gender只能赋值为男或者女
  • 元祖类型(Tuple): 一个固定长度的数组,并且数组中每一项的类型确定
 let arr: [string, number]
  arr = ["112",12];
  • any类型: any类型可以绕过类型检查,因此,any类型的数据可以赋值给任意类型
let data: any = "sdasdad";
let num: number = data;

类型别名

对已知的一些类型定义名称

type Gender = "男" | "女"
type User = {
    name: string,
     age: number,
     gender: Gender
 }

//如果设置了类型别名之后,某个变量使用了这个类型,就会受到约束,比如
let sex:Gender = "男"; //这里只能设置男或者女,设置成其他的值会报错

let user:User = { //这里的对象也是必须是User的类型,对象每个属性都必须存在,必须是这个类型,否则也会报错
    name : 'xxx',
    age : 14,
    gender : '男' 
}

函数的相关约束

函数重载:在函数实现之前,对函数调用的多种情况进行声明

可选参数:可以在某些参数后加上问号,表示该参数可以不用传递。可选参数必须在参数列表的末尾。

//获取用户信息,g:Gender,表示g这个形参类型是gender,只能传递男,女,然后函数后面的:User[],表示返回值是User这个对象数组[{name:"",age:11,gender:"男"}]

function getUsers(g: Gender): User[] {
     return [];
  }

扑克牌小练习

根据上面的一个学习,我们来做一个小案例

# 扑克牌小练习

1. 目标:创建一幅扑克牌(不包括大小王),打印该扑克牌

实现代码

type Shape = "♥" | "♠" | "♦" | "♣"; //定义扑克牌的形状

type NormalCard = { //定义每张牌的对象
    shape: Shape, //形状
    mark: number, //数字标识
}

type Deck = NormalCard[]; //一副牌是每张牌的数组

//创建一副扑克牌
function createDeck(): Deck {
    const deck: Deck = [];
	
    //1到13,J,Q,K使用11-13表示,这样比较好判断大小
    for (let i = 1; i <= 13; i++) {
        deck.push({
            mark: i,
            shape: "♠"
        });
        deck.push({
            mark: i,
            shape: "♣"
        });
        deck.push({
            mark: i,
            shape: "♥"
        });
        deck.push({
            mark: i,
            shape: "♦"
        });
    }

    return deck;
}

//打印扑克牌
function printDeck(deck: Deck) {
    let result = "\n";
    deck.forEach((card, i) => {
        let str = card.color;
        if (card.mark <= 10) {
            str += card.mark;
        } else if (card.mark === 11) {
            str += "J";
        }
        else if (card.mark === 12) {
            str += "Q";
        }
        else {
            str += "K";
        }

        result += str + "\t";
        if ((i + 1) % 6 === 0) {
            result += "\n";
        }
    });
    console.log(result)
}

//创建扑克牌
const dect = createDeck();

//打印扑克牌
printDeck(dect);

最终的效果

在这里插入图片描述

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

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

相关文章

AI绘画Stable diffusion的SDXL模型超详细讲解,针不错!(含实操教程)

大家好&#xff0c;我是画画的小强 朋友们好&#xff0c;今天分享的是Stable diffusion的SDXL模型以及相关实操。 与之前的SD1.5大模型不同&#xff0c;这次的SDXL在架构上采用了“两步走”的生图方式&#xff1a; 以往SD1.5大模型&#xff0c;生成步骤为 Prompt → Base → …

时序分析(二):input delay分析

一、IO接口分析基本模型 数据按照同步方式可分为系统同步和源同步方式两种。所谓系统同步指发送端和接收端共用一个时钟源&#xff1b;源同步指发送端提供数据同步时钟&#xff0c;接收端根据该时钟进行数据接收。现在多数通信中使用源同步方式&#xff0c;例如以太网、ADC等。…

使用 C# 实现Windows桌面壁纸软件

一、设置Windows壁纸 将电脑上的图片设置为壁纸&#xff0c;代码如下&#xff1a; [DllImport("user32.dll", CharSet CharSet.Auto)] static extern int SystemParametersInfo(int uAction, int uParam, string lpvParam, int fuWinIni); const int SPI_SETDESKW…

DM达梦数据库分析函数整理

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

从用户到粉丝,再到“裂变客户”:品牌忠诚度如何升级?

在竞争激烈的商业环境中&#xff0c;品牌忠诚度对于企业的成功至关重要。然而&#xff0c;如何将普通用户转化为忠实粉丝&#xff0c;并进一步升级为“裂变客户”&#xff0c;是每一个品牌都需要深思的问题。 从用户转变为粉丝&#xff0c;品牌需要建立与用户的情感连接 这不…

维吉尼亚密文解密小程序

维吉尼亚密文解密小程序 这几天在看CTF相关的课程&#xff0c;涉及到古典密码学和近代密码学还有现代密码学。自己编了一个解密小程序。 Vigenere 维吉尼亚密码 维吉尼亚是多表替换密码中比较典型的代表&#xff0c;维吉尼亚密码是在凯撒密码基础上产生的一种加密方法&#…

床上用品跨境电商:拥有沃尔玛1P特权的商家享有哪些显著优势?

在全球化的背景下&#xff0c;跨境电商对床上用品行业至关重要。沃尔玛因其品牌影响力、客户资源及物流体系在跨境电商平台中脱颖而出。拥有沃尔玛1P特权的商家享有更多曝光机会和独家优惠。那么&#xff0c;这些特权商家具体有哪些优势呢? 沃尔玛1P特权商家在曝光率上具有显著…

行业案例 | 智能终端设备的数据基础从哪儿来?

智能终端的快速发展让我们在许多科幻电影中看到的“未来场景”正在一步步变为现实&#xff1a;智能家居正在解放我们的双手&#xff0c;工业机器人让生产效率倍增&#xff0c;智能穿戴设备让我们便利地感知自身与外部的连结……然而&#xff0c;要想让万物“智联”&#xff0c;…

能力再升级 分贝通拥抱全场景数电票时代

——接收、入帐、归档&#xff0c;一个平台管理更轻松 分贝通上线机票数电票行程单&#xff0c;从开票、接收、对账入账和归档&#xff0c;全流程无纸化、线上化&#xff0c;告别了诸多麻烦&#xff0c;全面拥抱全场景数电票时代。 开票&#xff0c;告别麻烦沟通&#xff1a;一…

封装图片占位图组件

<laze-image class="image" :url="item.image" :game_name="item.game_name" :placeholder="require(@/static/images/common/placeholder.png)"></laze-image> 1.通过调用组件实现 先加载预览图片,再加载真实的图片 2…

【python】python入门day1

python入门 Python解析器Python注释Python中的变量&#xff08;重点&#xff09;练习&#xff1a;1、用python的print函数描述一段对话2、与计算机模拟一段对话&#xff0c;并且最终计算机需要将输入的内容全部输出3、模拟两个对话场景(根据提示输入内容&#xff0c;并且在后续…

提升红色展厅内容质量,讲好红色故事新篇章!

在当今数字化技术浪潮的推动下&#xff0c;借助多媒体技术的展厅&#xff0c;将红色文化的魅力推向了新的高度。然而&#xff0c;技术的运用仅仅是展厅设计方案中的冰山一角&#xff0c;内容制作作为方案落地的核心环节&#xff0c;其质量直接决定了红色文化展厅的展示效果和观…

说点智驾领域的实话!感知|定位|规划控制|就业……

你们有没有一种感觉&#xff0c;近几年自动驾驶技术栈迭代太快&#xff0c;自己稍不留神就与当下主流技术产生脱节了。 其实说实话&#xff0c;并非只有你如此&#xff0c;行业内的工程师都有类似感受。 智能驾驶行业交流群&#xff1a;点击进 分享几个我们最近聊天中的几位朋…

机票、火车票,YonSuite让企业支出笔笔可控

在数字化浪潮的推动下&#xff0c;企业的商旅管理正迎来一场深刻变革。传统的手动预订、报销模式已无法满足现代企业对效率和成本控制的双重要求。YonSuite商旅费控&#xff0c;作为一款领先的企业商旅管理平台&#xff0c;正以其独特的优势&#xff0c;帮助企业实现机票、火车…

2021年12月电子学会Python编程等级考试一级真题及答案

2021年12月Python一级真题 一、选择题 1.昨天的温度是5摄氏度&#xff0c;今天降温7摄氏度&#xff0c;今天的温度是多少摄氏度&#xff1f;( D ) A.12 B.7 C.2 D.-2 2.分析下面程序&#xff0c;关于程序说法正确的是&#xff1f;( D ) x1"11" x2"12…

什么牌子的开放式耳机质量好?五大优质机型,新手必看!

耳机的应用场景越来越多&#xff0c;各种类型的耳机开石出现&#xff0c;开放式耳机就是其中一种。从最初的单一音效到现在的高清晰度解析&#xff0c;开放式耳机已经是非常成熟的产品。耳机不仅音质纯净&#xff0c;佩戴起来也极为舒适&#xff0c;无论你身在何处&#xff0c;…

msvcp120.dll丢失的7种解决方法,教你如何快速修复msvcp120.dll文件

一、msvcp120.dll 缺失的具体表现 应用程序启动失败 当系统中缺失 msvcp120.dll 文件时&#xff0c;最直接的后果是依赖该文件的程序无法正常启动。据不完全统计&#xff0c;超过70%的基于 Visual C 2013 开发的应用程序在启动时会检查 msvcp120.dll 的存在。缺失此文件会导致…

安卓免费短剧大全v1.0.2/全部无需VIP实时更新全平台短剧

在当今社会&#xff0c;时间成为了许多人最为宝贵的资源。忙碌的工作与繁重的日常事务&#xff0c;常常让我们难以拨出时间沉浸于长篇大幅的影视作品中。对于那些热爱剧情、渴望在生活中点缀一抹戏剧色彩的朋友们而言&#xff0c;这无疑是一种挑战。 然而&#xff0c;随着免费…

独立接口面向对象设计

使用面向对象的编程思想&#xff0c;来进行独立接口面向对象的设计&#xff0c;一个接口测试对应一个类&#xff0c;这样后面做框架也比较规范一些。 类定义包含类的属性和类的方法。 类属性包含接口访问地址和接口测试数据 类方法包含测试方法 1、V1.0 实现一组正常注册数据…

从环型到树型:多种网络拓扑结构的优缺点及应用

网络拓扑作为网络设计的基础&#xff0c;对于网络的性能、可靠性和扩展性起着重要作用。作为网络通信工程师&#xff0c;我们不仅需要了解网络拓扑的基本概念&#xff0c;还需深入掌握其在实际网络设计中的应用。本文将详细介绍网络拓扑&#xff0c;包括物理拓扑、逻辑拓扑&…