TypeScript入门二(类型)

2023-10-31

1,TypeScrip 的静态类型
TypeScript 的一个最主要特点就是可以定义静态类型,英文是 Static Typing。那到底是什么意思那?太复杂的概念性东西这里就不讲了,你可以简单的理解“静态类型”为,就是你一旦定义了,就不可以再改变了。就像人一生下来性别就定了,男就是男的,女就是女的。这个事不可以改变了
2,如何定义静态类型,相关代码如下:

// 正确代码
const count: number = 1;
= 
//错误代码
const count: number = 1;
count = "jspang";

上面代码中: number就是定义了一个静态类型。这样定义后count这个变量在程序中就永远都是数字类型了,不可以改变了。比如我们这时候给count复制一个字符串,它就报错了。
3,对象类型
新建一个demo1.ts,写下如下代码

const xiaoJieJie: {
  name: string,
  age: number,
} = {
  name: "大脚",
  age: 18,
};
console.log(xiaoJieJie.name);

写完后,我们在terminal(终端)中输入ts-node demo1.ts,可以看到结果输出了大脚。这就是一个经典的对象类型,也是最简单的对象类型。对象类型也可以是数组,比如现在我们需要很多小姐姐,我们就可以这样写。

const xiaoJieJies: String[] = ["谢大脚", "刘英", "小红"];

这时候的意思是,变量xiaoJieJies必须是一个数组,数组里的内容必须是字符串。你可以试着把字符串改为数字,VSCode会直接给我们报错

const xiaoJieJies: String[] = ["谢大脚", "刘英", 123];

现在都讲究面向对象编程,我这面向对象编程这么多年了,也没再多编出来一个。我们再来看看下面的代码。这个代码就是用类的形式,来定义变量。

class Person {}
const dajiao: Person = new Person();

这个意思就是dajiao必须是一个Person类对应的对象才可以。我们还可以定义一个函数类型,并确定返回值。代码如下:

const jianXiaoJieJie: () => string = () => {
  return "大脚";
};

那我们现在总结一下对象类型可以有几种形式:

对象类型
数组类型
类类型
函数类型
这几种形式我们在TypeScript里叫做对象类型。
4,简单类型定义
直接上代码:

//定义1
function getTotal(one: number, two: number): number {
  return one + two;
}

const total = getTotal(1, 2);
// 定义2,无返回值
function sayHello(): void {
  console.log("hello world");
}
// 函数参数为对象(结构)时
// 两个参数:
function add({ one, two }: { one: number, two: number }): number {
  return one + two;
}

const three = add({ one: 1, two: 2 });
// 一个参数
function getNumber({ one }: { one: number }): number {
  return one;
}

const one = getNumber({ one: 1 });

5,一般数组类型定义
现在我们可以定义一个最简单的数组类型,比如就是数字类型,那么就可以这么写:

const numberArr = [1, 2, 3];
const numberArr: number[] = [1, 2, 3];
const stringArr: string[] = ["a", "b", "c"];
const undefinedArr: undefined[] = [undefined, undefined];
const arr: (number | string)[] = [1, "string", 2];

6,数组中对象类型定义
如果你作过一些项目,你就会知道真实的项目中数组中一定会有对象的出现。那对于这类带有对象的数组定义就稍微麻烦点了。 比如现在我们要定义一个有很多小姐姐的数组,每一个小姐姐都是一个对象。这是的定义就编程了这样

const xiaoJieJies: { name: string, age: Number }[] = [
  { name: "刘英", age: 18 },
  { name: "谢大脚", age: 28 },
];

这种形式看起来比较麻烦,而且如果有同样类型的数组,写代码也比较麻烦,TypeScript 为我们准备了一个概念,叫做类型别名(type alias)。

比如刚才的代码,就可以定义一个类型别名,定义别名的时候要以type关键字开始。现在定义一个Lady的别名。

type Lady = { name: string, age: Number };
const xiaoJieJies: Lady[] = [
  { name: "刘英", age: 18 },
  { name: "谢大脚", age: 28 },
];
// 利用类定义也是可以的
class Madam {
  name: string;
  age: number;
}
const xiaoJieJies: Madam[] = [
  { name: "刘英", age: 18 },
  { name: "谢大脚", age: 28 },
];

7,元组的使用

const xiaojiejie: [string, string, number] = ["dajiao", "teacher", 28];
const xiaojiejies: [string, string, number][] = [
  ["dajiao", "teacher", 28],
  ["liuying", "teacher", 18],
  ["cuihua", "teacher", 25],
];

8,TypeScript中的interface接口
现在红浪漫洗浴中心要开始招聘小姐姐了,这时候你需要一些小姐姐的简历投递和自动筛选功能,就是不符合简历要求的会直接被筛选掉,符合的才可以进入下一轮的面试。那最好的解决方法就是写一个接口。TypeScript 中的接口,就是用来规范类型的。
9,Interface接口初步了解
现在我们要作一个简历的自动筛选程序,很简单。年龄小于 25 岁,胸围大于 90 公分的,可以进入面试环节。我们最开始的写法是这样的

const screenResume = (name: string, age: number, bust: number) => {
  age < 24 && bust >= 90 && console.log(name + "进入面试");
  age > 24 || (bust < 90 && console.log(name + "你被淘汰"));
};

screenResume("大脚", 18, 94);

这时候老板又增加了需求,说我必须能看到这些女孩的简历。于是你又写了这样一个方法。

const getResume = (name: string, age: number, bust: number) => {
  console.log(name + "年龄是:" + age);
  console.log(name + "胸围是:" + bust);
};
getResume("大脚", 18, 94);

最后我们可以用个办法来整合一下这两个代码----interface
代码如下:

interface Girl {
  name: string;
  age: number;
  bust: number;
}

有了接口后,我们的程序也要作一些修改,需要写成下面的样子。这样就更像是面向对象编程了。

const screenResume = (girl: Girl) => {
  girl.age < 24 && girl.bust >= 90 && console.log(girl.name + "进入面试");
  girl.age > 24 || (girl.bust < 90 && console.log(girl.name + "你被淘汰"));
};

const getResume = (girl: Girl) => {
  console.log(girl.name + "年龄是:" + girl.age);
  console.log(girl.name + "胸围是:" + girl.bust);
};
const girl = {
  name: "大脚",
  age: 18,
  bust: 94,
};

screenResume(girl);
getResume(girl);

10,接口非必选值得定义
因为接口这里的知识点还是挺多的。比如这时候老板又有了新的要求,要求尽量能看到小姐姐的腰围,但是不作强制要求,就是可选值吗。那接口如何定义那?其实typeScript已经为我们准备好了相应的办法,就是在:号前加一个?

比如把Girl的接口写成这样。

interface Girl {
  name: string;
  age: number;
  bust: number;
  waistline?: number;
}
const getResume = (girl: Girl) => {
  console.log(girl.name + "年龄是:" + girl.age);
  console.log(girl.name + "胸围是:" + girl.bust);
  girl.waistline && console.log(girl.name + "腰围是:" + girl.waistline);
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

TypeScript入门二(类型) 的相关文章

  • 如何删除除任何特定 id 之外的元素

    假设有一个父 id 其中包含许多元素 我想删除除一个元素之外的所有元素 ex parent id children not id n remove
  • 显示具有多个父代的 D3 树

    我目前有this http bl ocks org mbostock 4339083图已实现 我希望在描述具有多个父节点的子节点时保持结构和可折叠性 有没有办法做到这一点 我研究了力图 但我也想保留一组层次结构 这意味着 1 级的父级可以有
  • Firebase,只得到新的孩子[重复]

    这个问题在这里已经有答案了 var firebase new Firebase firebaseRef on child added function snapshot 这将接收所有元素 有没有办法在创建新的 Firebase 引用时不接收
  • 在 Internet Explorer 中使用什么来监视 jscript 内存使用情况

    我们正在调试 GWT 应用程序 在 Firefox 中运行正常 在 IE6 0 中开始运行正常 但一段时间后 它就会崩溃并开始爬行 经过一些测试后 我们怀疑存在一些内存问题 使用了太多内存 内存泄漏等 除了使用taskmanager和pro
  • 位置特征检测:固定

    我正在尝试找到一个脚本来检测设备是否放置position fixed元素相对于视口而不是整个文档 目前 标准桌面浏览器和 Mobile Safari 适用于 iOS 5 都是这样做的 而 Android 设备则相对于整个文档放置固定元素 我
  • Angular.js:如何从无序列表中获取 orderBy 或过滤器来工作?

    尝试根据价格和评级 在返回的对象中 进行排序 我宁愿用 ng click 和 li 来代替使用选择菜单 有没有办法做到这一点 我环顾四周 这是我能想到的最接近的 ul class restaurant filter li i class i
  • 使用 Angular 指令禁用文本选择

    我正在学习 JavaScript 和 AngularJS 我想使用 Angular Directive 禁用文本选择 我有该函数的 JavaScript 代码 function clearSelection if document sele
  • jQuery .push 到 .get 调用中的数组给出空结果

    谁能告诉我为什么下面给我一个空字符串 当我console log contentArray in the get 回调函数它显示数据 但是当我尝试在下面的代码中执行它时 结果为空 sectionArray contentArray func
  • 在版本 4.4.6 中禁用 ckeditor 上下文菜单

    我在 Rails4 项目中使用 ckeditor 我尝试了 ckeditor gem 和 ckeditor rails gem 来提供 ckeditor 库 这里有多个帖子 人们希望删除 ckeditor 上下文菜单 以便可以显示本机浏览器
  • 从回调中访问状态

    我在从回调访问组件状态时遇到问题 国家的价值num更改正确 但此类更改对于加载时定义的回调函数不可见 import React useState from react class MyObject callback gt void cons
  • JavaScript 验证和 PHP 验证?

    我正在使用 jquery 验证插件来验证空表单 我还应该在 PHP 中检查一下以确保 100 正确吗 或者用 javascript 验证就可以了 谢谢 您应该始终在服务器上进行验证 如果用户以某种方式不使用 Javascript 提交表单
  • 导航栏下拉菜单(折叠)在 Bootstrap 5 中不起作用

    我在尝试使用以下命令创建响应式菜单或下拉按钮时遇到问题Bootstrap 5一切似乎都正常 导航图标和下拉图标出现 但它不起作用 当我单击nav图标或dropdown按钮 无dropdown menu apears 我想特别提到的是 我还包
  • 为什么 setTimeout 在 Chrome 中触发两次,而在 IE 或 Firefox 中则不然?

    有人能告诉我为什么 javascript 函数 生成新号码 在 Chrome 中触发两次 但在 IE 或 Firefox 中则不会 使用 Chrome 20 0 1132 57 IE9 和 Firefox 13
  • JavaScript 继承;调用和原型

    要在Javascript中实现继承 通常需要执行以下两个步骤 假设我有一个基类 Animal var Animal function name this name name 我现在想从中派生一个子类 Dog 所以我想说 var Dog fu
  • onclick 事件中未调用函数

    我想在每个 YouTube 链接的末尾添加一些 HTML 以在 litebox 中打开播放器 到目前为止 这是我的代码 document ready function var valid url new RegExp youtube com
  • 如何在另一个自定义 Hook 中使用返回值的自定义 Hook?

    我正在使用 React native 其中有一个名为的自定义 HookuseUser使用以下方法从 AWS Amplify 获取用户信息Auth getUserInfro方法 然后获取返回对象的一部分并用它设置一个状态变量 我还有另一个名为
  • 表单发布请求并存储收到的数据

    我有一个非常简单的表单 在提交时发出发布请求
  • 如何使用 JavaScript 或 jQuery 克隆 HTML 元素的样式对象?

    我正在尝试克隆元素的样式对象 这应该允许我在更改后重置所述元素的样式 例如 el style left 50px curr style left 50px Modify the elements style The cloned style
  • Google Maps API (v3) 添加/更新标记

    编辑 它现在可以工作 但如果用户不允许或没有基于位置的服务 则不会加载 请参阅 jsfiddle 示例接受的答案评论 我已经浏览了一些教程和问题 但我无法安静地理解正在发生的事情 或者在这种情况下 没有发生 当用户单击链接时 我正在加载地图
  • 使用 next.js 进行服务器端渲染与传统 SSR

    我非常习惯 SSR 意味着页面得到完全刷新并从服务器接收完整 HTML 的方法 其中根据后端堆栈使用 razor pub other 进行渲染 因此 每次用户单击导航链接时 它只会向服务器发送请求 整个页面将刷新 接收新的 HTML 这就是

随机推荐

  • 如何升级Vue

    如何将 2 9 6 Vue升级到3 0版本 新按装Vue可以使用如下命令按装Vue最新版本 npm install g vue cli 然后使用Vue V 或 vue version进行查看按装的最新版本 如果按装没有成功需要检查nodej
  • 第十届蓝桥杯C/C++B组试题水题解析

    第十届蓝桥杯C C B组试题水题解析 1 填空题 试题 A 组队 试题 B 年号字串 试题 C 数列求值 试题 D 数的分解 2 编程题 试题 F 特别数的和 试题 G 完全二叉树的权值 试题 H 等差数列 试题 I 后缀表达式 这一届蓝桥
  • WebAssembly的Qt

    Qt for WebAssembly WebAssembly的Qt Qt for Webassembly lets you to run Qt applications on the web Qt for Webassembly允许您在we
  • pip Could not find a version that satisfies the requirement *(from -r requirements.txt)

    在制作一个docker镜像的时候 RUN pip install r requirements txt i http pypi tuna tsinghua edu cn simple 但是报错说 找不到这个版本 我就去pypi搜 发现是有这
  • swagger 生成接口文档,并导出html和pdf的过程

    swagger 生成接口文档 并导出html和pdf的过程 这里写目录标题 swagger 生成接口文档 并导出html和pdf的过程 swagger 生成接口文档 swagger导出pdf和html 解决乱码问题 一 swagger 生成
  • typora使用

    1 主题配置 先打开主题文件夹 文件 gt gt 偏好设置 gt gt 外观 gt gt 打开主题文件夹 1 1字体 修改字体需要修改css文件 确定当前所用主题 可以在typora菜单点击主题 看看当前勾选的是哪个主题 比如github
  • 感性工学

    感性工学是为了消费者情感的满足而进行调查分析的 对分析的定性数据进行解释和定量化 即规范化 目的是为设计师和工程师实现情感设计 感性工程是指将人类定性的情感转化为定量数据化 以便工程师在设计中得到应用 具体化为产品的格式 例如 如果消费者想
  • 动态规划算法解决01背包问题

    01背包问题 有一个背包它可以背n单位重量的物品 有几种物品它们的重量分别为1 2 3个单位 它们对应的权重分别为1500 2000 3000 求该背包怎样放物品才能使权重最大 一种物品只能放一次 思路 如下图用二维数组 v i j 代表i
  • Web浏览器没有Flash如何播放RTMP协议直播

    各大主流浏览器在很早的时候就已声明 2020 年底不支持 Adobe Flash 所以已经线上运行的项目以及涉及直播的项目 都会涉及一个问题 没有 Adobe Flash 在 Web 浏览器端如何播放 RTMP 直播流 方案1 需要流媒体服
  • WSL2 占位程序接收到错误数据。 Error code: Wsl/Service/0x800706f7

    在 windows 的 terminal 中输入 需要以管理员权限 netsh winsock reset 然后就可以正常启动 WSL2 了 不用重启电脑 from 李志成的个人网站
  • qt中设置父窗口中某一控件样式后,子窗口中某一控件也随父控件样式

    引言 创建的窗口中含有滚动区域 滚动区域创建了很多按钮 点击按钮后弹出一个弹框 当设置了滚动区域的中心窗口的背景样式后 之前设置好的点击后按钮弹出框的背景样式也跟随着变化了 方法 究其原因是因为滚动区域的窗口与点击按钮后的弹出框之间存在着关
  • 【线程(二)】——互斥量的详细解析

    作者 努力学习的少年 个人简介 双非大二 一个正在自学c 和linux操作系统 写博客是总结知识 方便复习 目标 进大厂 如果你觉得文章可以的话 麻烦你给我点个赞和关注 感谢你的关注 目录 进程线程间的互斥的相关概念 错误的抢票系统 lin
  • 6、(二进制类型)BIT、BINARY、VARBINARY、BLOB

    MySQL 支持两类字符型数据 文本字符串和二进制字符串 二进制字符串类型有时候也直接被称为 二进制类型 MySQL 中的二进制字符串有 BIT BINARY VARBINARY TINYBLOB BLOB MEDIUMBLOB 和 LON
  • 【网络运维与安全岗位】月薪2.5w,您还不知道的前景!

    一 为什么学网络安全 标重点 1 市场巨大 每年各安全厂商收入高达400亿左右 随着5G的发展 万物互联时代 市场将进一步扩大 2 薪资高 网安人才的匮乏 用人开出招聘薪资往往高于求职者的预期 3 靠能力说话 在网络安全专业 专业技能竞争力
  • SourceTree 总是提示 git credential manager

    解决 1 使用sourcetree内嵌的git 还不行的话更新下版本 2 仓库设置里面加上用户名密码 格式 http 用户名 密码 xxx git
  • 常见数据库安装

    简介 本文记录了常用数据库 MySQL PostgreSQL MSSQL Oracle Redis MongoDB在Windows 及Linux Ubuntu 下 MSSQL Oracle除外 的安装 macOS可参考前两者 解决了Orac
  • 摄像机控制脚本

    脚本效果 1 跟随目标物体 2 通过滚轮调整距离 右键或Ctrl 左键旋转角度 using System Collections using System Collections Generic using UnityEngine publ
  • ASP.NET MVC3 类面向切面AOP 的Filter操作

    在开发大项目的时候总会有相关的AOP面向切面编程的组件 而MVC 特指 Asp Net MVC 以下皆同 项目中不想让MVC开发人员去关心和写类似身份验证 日志 异常 行为截取等这部分重复的代码 那我们可以通过AOP截取实现 而在MVC项目
  • 生产者/消费者代码(使用notify和wait实现)

    package cn wzy Lock import java util Random public class ConsumerAndProducer static String food new String 5 static Stri
  • TypeScript入门二(类型)

    1 TypeScrip 的静态类型 TypeScript 的一个最主要特点就是可以定义静态类型 英文是 Static Typing 那到底是什么意思那 太复杂的概念性东西这里就不讲了 你可以简单的理解 静态类型 为 就是你一旦定义了 就不可