typescript学习回顾(二)

今天来分享一下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.mfbz.cn/a/747077.html

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

相关文章

微信小程序-自定义组件checkbox

一.自定义Coponent组件 公共组件&#xff1a;将页面内公共的模块抽取为自定义组件&#xff0c;在不同页面复用。 页面组件&#xff1a;将复杂页面进行拆分&#xff0c;降低耦合度&#xff0c;有利于代码维护。 可以新建文件夹component放组件&#xff1a; 组件名为custom-che…

msvcr110.dll丢失的解决方法,亲测有效的几种解决方法

最近&#xff0c;我在启动一个程序时&#xff0c;系统突然弹出一个错误提示&#xff0c;告诉我电脑缺失了一个名为msvcr110.dll的文件。这让我感到非常困惑&#xff0c;因为我之前从未遇到过这样的问题。经过一番搜索和尝试&#xff0c;我总结了5种靠谱的解决方法。下面分享给大…

1.k8s:架构,组件,基础概念

目录 一、k8s了解 1.什么是k8s 2.为什么要k8s &#xff08;1&#xff09;部署方式演变 &#xff08;2&#xff09;k8s作用 &#xff08;3&#xff09;Mesos&#xff0c;Swarm&#xff0c;K8S三大平台对比 二、k8s架构、组件 1.k8s架构 2.k8s基础组件 3.k8s附加组件 …

【2024最新版】Eclipse安装配置全攻略:图文详解

目录 1. Eclipse介绍1.1 背景1.2 主要特点和功能1.3 版本发布1.4 优势与劣势 2. 下载Eclipse3. 安装Eclipse4. 启动Eclipse 1. Eclipse介绍 Eclipse是一个开源的、基于Java的可扩展开发平台&#xff0c;主要用于Java开发者&#xff0c;但也支持其他语言如C/C、PHP、Python等。…

CCS的安装步骤

CCS的安装步骤 安装之前有几件重要的事情要做&#xff1a; 首先肯定是要下载安装包啦&#xff01;点击此处是跳到官网下载地址安装包不能处的路径中不能包含中文关闭病毒防护和防火墙&#xff0c;以及其他杀毒软件最后是在重启后进行安装 主要的步骤如下&#xff1a; 找到安…

【SpringBoot Web框架实战教程(开源)】01 使用 pom 方式创建 SpringBoot 第一个项目

导读 这是一系列关于 SpringBoot Web框架实战 的教程&#xff0c;从项目的创建&#xff0c;到一个完整的 web 框架&#xff08;包括异常处理、拦截器、context 上下文等&#xff09;&#xff1b;从0开始&#xff0c;到一个可以直接运用在生产环境中的web框架。而且所有源码均开…

202485读书笔记|《我还有一片风景要完成》——溪水急着要流向海洋 浪潮却渴望重回土地 弱水长流,我只能尽一瓢饮,世界大千,我只能作一瞬观

202485读书笔记|《我还有一片风景要完成》——溪水急着要流向海洋 浪潮却渴望重回土地 弱水长流&#xff0c;我只能尽一瓢饮&#xff0c;世界大千&#xff0c;我只能作一瞬观 《华语散文温柔的一支笔&#xff1a;张晓风作品集&#xff08;共5册&#xff09;》张晓风&#xff0c…

对https://registry.npm.taobao.org/tyarn的请求失败,原因:证书过期

今天安装yarn时&#xff0c;报错如下&#xff1a; request to https://registry.npm.taobao.org/yarn failed, reason: certificate has expired 原来淘宝镜像过期了&#xff0c;需要重新搞一下 记录一下解决过程&#xff1a; 1.查看当前npm配置 npm config list 2.清…

【Windows 常用工具系列 17 -- windows bat 脚本多参数处理】

请阅读【嵌入式开发学习必备专栏】 文章目录 bat 脚本命令行参数使用示例多参数处理使用示例遍历所有参数 bat 脚本命令行参数 在Windows批处理&#xff08;.bat&#xff09;脚本中接收命令行参数是一个常见的需求&#xff0c;这样的脚本能够根据提供的参数执行不同的操作。命…

【每日刷题】Day76

【每日刷题】Day76 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 561. 数组拆分 - 力扣&#xff08;LeetCode&#xff09; 2. 删除有序链表中重复的元素-II_牛客题霸…

月入稳定还是创业冒险:你的选择决定未来

大家好&#xff0c;我是汇舟问卷。在现在这个环境下&#xff0c;无论是就业还是创业都不好做。在传统就业与创业之间的选择时&#xff0c;我们应避免一概而论或过度推崇某一方向。 事实上&#xff0c;并非所有人都适合创业&#xff0c;对于那些满足于稳定工作&#xff0c;每月…

【前端】Vue项目和微信小程序生成二维码和条形码

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;我是前端菜鸟的自我修养&#xff01;今天给大家分享Vue项目和微信小程序如何生成二维码和条形码&#xff0c;介绍了JsBarcode、wxbarcode等插件&#xff0c;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01…

sys.stdin对象——实现标准输入

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 sys.stdin是一个标准化输入对象&#xff0c;可以连续输入或读入文件所有内容&#xff0c;不结束&#xff0c;不能直接使用。输入完成后&am…

数据结构——

1. 什么是并查集&#xff1f; 在计算机科学中&#xff0c;并查集&#xff08;英文&#xff1a;Disjoint-set data structure&#xff0c;直译为不数据结构交集&#xff09;是一种数据结构&#xff0c;用于处理一些不交集&#xff08;Disjoint sets&#xff0c;一系列没有重复元…

C#基于SkiaSharp实现印章管理(2)

上一篇文章最后提到基于System.Text.Json能够序列化SKColor对象&#xff0c;但是反序列化时却无法解析本地json数据。换成Newtonsoft.Json进行序列化和反序列化也是类似的问题。   通过百度及查看微软的帮助文档&#xff0c;上述情况下需自定义转换类以处理SKColor类型数据的…

AI自动生成角色和情节连续的漫画,中山大学联想提出AutoStudio,可以多轮交互式连续生成并保持主题一致性。

中山大学和联想研究院提出AutoStudio: 是一种无需训练的多代理框架&#xff0c;用于多轮交互式图像生成&#xff0c;能够在生成多样化图像的同时保持主体一致性。 AutoStudio 采用三个基于 LLM 的智能体来解释人类意图并为 SD 模型生成适当的布局指导。此外&#xff0c;还引入…

go中的方法 func-----数据类型

本文是java学习者学go种产生的容易记混点的笔记,所以有其他编译语言的基础更好 go的方法有点像js 基础 func main() {fmt.Println("Starting")var p *string new(string)*p "hello world"demo : "demo"fmt.Println(*&demo) //这样既然也…

山水风景视频素材去哪里下?去哪里找?山水风景下载网站分享

在这个数字时代&#xff0c;视频已经成为最直观、有效的传达情感和分享故事的工具。对于那些渴望通过视频传递视觉美感和情感共鸣的创作者来说&#xff0c;拥有高质量的山水风景视频素材是关键。互联网虽然是一个信息量庞大的平台&#xff0c;但找到令人赞叹的山水风景视频素材…

SOA和ESB介绍

SOA&#xff08;面向服务的架构&#xff09; 面向服务的架构&#xff08;Service-Oriented Architecture&#xff0c;SOA&#xff09;是一种设计理念&#xff0c;用于构建松耦合的、可互操作的、模块化的服务。在SOA架构中&#xff0c;应用程序被划分为一系列的服务&#xff0c…

让AI保持怪异

让AI保持怪异 Anthropic的创意技术专家和员工设计师凯尔图尔曼(Kyle Turman)分享了一种深深引起共鸣的观点。他说(转述原话):“人工智能实际上真的很奇怪&#xff0c;我认为人们对这一点的认识还不够。”这引发了我向小组提出的问题:我们是否有消毒人工智能固有的陌生感的风险?…