鸿蒙harmony--TypeScript基础语法

把青春献给身后那座辉煌的都市,为了这个美梦我们付出着代价

目录

一,基础类型

二,数组

三,any

四,变量的类型注释

五,函数

5.1 参数类型注解

5.2 返回类型注解

5.3 匿名函数

六,对象类型

可选属性

七,联合类型

7.1 定义联合类型

7.2 使用联合类型

八,类型别名

九,接口

类型别名和接口的区别

十,类型断言

十一,null 和 undefined

非空断言运算符(后缀 !)

十二,枚举

数字枚举

字符串枚举

一,基础类型

TypeScript 有三个非常常用的基础类型:stringnumber 和 boolean

string 表示字符串值,如 "Hello, world"

number 代表数字。TypeScript 没有特殊的整数运行时值,因此没有相当于 int 或 float 的值 ,一切都只是 number

boolean 代表 true 和 false 这两个值

注意: StringNumber 和 Boolean(以大写字母开头)是合法的,但指的是一些很少出现在代码中的特殊内置类型。所以开发中我们一般使用 stringnumber 或 boolean 作为类型。

二,数组

数组的第一种写法:

numberArry:number[] =[1,2,3,4,5]
stringArry:string[] =["a","b","c","d"]
booleanArry:boolean[] = [true,false,true]

数组的第二中写法:

numberArry1:Array<number> =[1,2,3,4,5]
stringArry1:Array<string> =["a","b","c","d"]
booleanArry1:Array<boolean> = [true,false,true]

注意,[number] 是另一回事,不是数组

三,any

当一个值的类型为 any 时,你可以访问它的任何属性,像函数一样调用它,将它分配给任何类型的值,或者几乎任何其他东西这在语法上是合法的

obj:any = {a:1,b:"11"
}

注意:ArkTs已经不支持any

四,变量的类型注释

当使用 constvar 或 let 声明变量时,可以选择添加类型注释以显式指定变量的类型,也可以不用注释,因为TS会自动推断代码中的类型。

test(){let a:number = 1let b =2const c:string = "3"const d="4"
}

五,函数

5.1 参数类型注解

声明函数时,可以在每个参数后面加上类型注解,声明函数接受哪些类型的参数。参数类型注释在参数名称之后:

function test(name:string){console.log(name)
}

当参数具有类型注释时,将检查该函数的参数:

5.2 返回类型注解

可以添加返回类型注释。返回类型注释出现在参数列表之后:

function test(name:string):number{console.log(name)return 888
}

与变量类型注解非常相似,通常不需要返回类型注解,因为 TypeScript 会根据其 return 语句推断函数的返回类型。

返回Promise的函数:

async function test(name:string):Promise<number> {console.log(name)return 888
}

或者

function test1(name:string):Promise<number> {console.log(name)return new Promise((resolve, reject) => {if(name){resolve(999)}else {reject(888)}})
}

5.3 匿名函数

匿名函数与函数声明有点不同。当一个函数出现在 TypeScript 可以确定如何调用它的地方时,该函数的参数会自动被赋予类型。

const names = ["Alice", "Bob", "Eve"];
names.forEach(function (s) {console.log(s.toUpperCase());
});

即使参数 s 没有类型注释,TypeScript 还是使用 forEach 函数的类型以及推断的数组类型来确定 s 将具有的类型。这个过程称为上下文类型,因为函数发生的上下文告知它应该具有什么类型。

或者

export default class TsTest {numberArry:number[] =[1,2,3,4,5]method(){this.numberArry.forEach((item,index)=>{})}
}

六,对象类型

要定义对象类型,我们只需列出其属性及其类型。

function duixiang(obj:{x:number,y:number}){console.log(obj.x+obj.y+"")
}

可选属性

对象类型还可以指定它们的部分或全部属性是可选的。为此,请在属性名称后添加 ?

function duixiang(obj:{x:number,y?:number}){console.log(obj.x+obj.y+"")
}
method(){duixiang({x:1})duixiang({x:1,y:2})
}

七,联合类型

7.1 定义联合类型

联合类型是由两种或多种其他类型组成的类型,表示可能是这些类型中的任何一种的值。我们将这些类型中的每一种都称为联合的成员。

export default class TsTest {name:string | numberunion(){this.name = 1 //okthis.name = "11" //okthis.name= false //Type 'boolean' is not assignable to type 'string | number'. <ArkTSCheck>}}

7.2 使用联合类型

TypeScript 只有在对联合的每个成员都有效的情况下才允许操作。例如,如果你有联合 string | number,则不能使用仅在 string 上可用的方法:

union(){this.name.toUpperCase()//Property 'toUpperCase' does not exist on type 'string | number'. Property 'toUpperCase' does not exist on type 'number'
}

解决方案是用代码缩小联合,就像在没有类型注释的 JavaScript 中一样。当 TypeScript 可以根据代码的结构为某个值推断出更具体的类型时,就会发生缩小。

union(){if(typeof this.name === "string"){console.log(this.name.toUpperCase())//ok}else {this.name++   //ok}
}

八,类型别名

我们一直通过直接在类型注释中编写对象类型和联合类型来使用它们。这很方便,但通常希望多次使用同一个类型并用一个名称引用它。

type YuanZhen = {name:string;age:number;
}
export default class TsTest {union(yuan:YuanZhen){yuan.name="袁震"yuan.age=30}}

可以使用类型别名来为任何类型命名,而不仅仅是对象类型。例如,类型别名可以命名联合类型:

type Yuan= number | string | boolean

九,接口

接口声明是命名对象类型的另一种方式:

interface Point {x: number;y: number;
}function printCoord(pt: Point) {console.log("The coordinate's x value is " + pt.x);console.log("The coordinate's y value is " + pt.y);
}printCoord({ x: 100, y: 100 });

就像我们在上面使用类型别名时一样,该示例就像我们使用匿名对象类型一样工作。TypeScript 只关心我们传递给 printCoord 的值的结构 - 它只关心它是否具有预期的属性。只关心类型的结构和功能是我们称 TypeScript 为结构类型类型系统的原因。

类型别名和接口的区别

类型别名和接口非常相似,在很多情况下你可以在它们之间自由选择。interface 的几乎所有功能都在 type 中可用,主要区别在于无法重新打开类型以添加​​新属性,而接口始终可扩展。

扩展接口:

interface Animal {
name: string;
}interface Bear extends Animal {
honey: boolean;
}const bear = getBear();
bear.name;
bear.honey;

通过交叉扩展类型:

type Animal = {
name: string;
}type Bear = Animal & {
honey: boolean;
}const bear = getBear();
bear.name;
bear.honey;

十,类型断言

有时你会得到关于 TypeScript 无法知道的值类型的信息。

例如,如果你使用的是 document.getElementById,TypeScript 只知道这将返回某种 HTMLElement,但你可能知道你的页面将始终具有具有给定 ID 的 HTMLCanvasElement

在这种情况下,你可以使用类型断言来指定更具体的类型:

const myCanvas = document.getElementById("main_canvas") as HTMLCanvasElement;

与类型注释一样,类型断言被编译器删除,不会影响代码的运行时行为。

const myCanvas = <HTMLCanvasElement>document.getElementById("main_canvas");

十一,nullundefined

JavaScript 有两个基础值用于表示值不存在或未初始化的值:null 和 undefined

当值为 null 或 undefined 时,需要在对该值使用方法或属性之前测试这些值。就像在使用可选属性之前检查 undefined 一样,可以使用缩小来检查可能是 null 的值:

function doSomething(x: string | null) {if (x === null) {// do nothing} else {console.log("Hello, " + x.toUpperCase());}
}

非空断言运算符(后缀 !

TypeScript 还具有一种特殊的语法,可以在不进行任何显式检查的情况下从类型中删除 null 和 undefined。在任何表达式之后写 ! 实际上是一个类型断言,该值不是 null 或 undefined

function liveDangerously(x?: number | null) {// No errorconsole.log(x!.toFixed());
}

就像其他类型断言一样,这不会改变代码的运行时行为,所以当你知道值不能是 null 或 undefined 时,只使用 ! 很重要。

十二,枚举

枚举允许开发者定义一组命名常量。使用枚举可以更轻松地记录意图,或创建一组不同的案例。TypeScript 提供基于数字和基于字符串的枚举。

数字枚举

可以使用 enum 关键字定义枚举。

enum Direction {Up = 1,Down,Left,Right,
}

上面,我们有一个数字枚举,其中 Up 用 1 初始化。从那时起,以下所有成员都会自动递增。换句话说,Direction.Up 的值为 1Down 的值为 2Left 的值为 3Right 的值为 4

或者:

enum Direction {Up,Down,Left,Right,
}

在这里,Up 的值为 0Down 的值为 1,以此类推。这种自动递增行为对于我们可能不关心成员值本身但要注意每个值与同一个中的其他值不同的情况很有用枚举。

字符串枚举

在字符串枚举中,每个成员都必须使用字符串字面或另一个字符串枚举成员进行常量初始化。

enum Direction {Up = "UP",Down = "DOWN",Left = "LEFT",Right = "RIGHT",
}

虽然字符串枚举没有自动递增行为,但字符串枚举的好处是它们 “serialize” 很好。换句话说,如果你正在调试并且必须读取数字枚举的运行时值,则该值通常是不透明的 - 它本身并没有传达任何有用的含义

字符串枚举允许你在代码运行时提供有意义且可读的值,而与枚举成员本身的名称无关。

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

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

相关文章

APP攻防-资产收集篇反证书检验XP框架反代理VPN数据转发反模拟器

知识点 1、APP资产-抓包突破&反模拟器 2、APP资产-抓包突破&反证书检验 3、APP资产-抓包突破&反代理VPN 章节点&#xff1a; 1、APP资产-内在提取&外在抓包 2、APP逆向-反编译&删验证&重打包 3、APP安全-存储&服务&组件&注册等 专题点&…

HDFS HA 之 HA 原理

1 ZKFC解析 HA(High Availability)是HDFS支持的一个重要特性,可以有效解决Active Namenode遇到故障时,将可用的Standby节点变成新的Active状态的问题,使集群能够正常工作。目前支持冷切换和热切换两种方式。冷切换通过手动触发,缺点是不能够及时恢复集群。实际生产中以应用…

2024年【危险化学品经营单位主要负责人】报名考试及危险化学品经营单位主要负责人免费试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品经营单位主要负责人报名考试参考答案及危险化学品经营单位主要负责人考试试题解析是安全生产模拟考试一点通题库老师及危险化学品经营单位主要负责人操作证已考过的学员汇总&#xff0c;相对有效帮助危险化…

LeetCode:49. 字母异位词分组

49. 字母异位词分组 1&#xff09;题目2&#xff09;代码3&#xff09;结果 1&#xff09;题目 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs…

python爬虫3

1.异常处理&#xff0c;使代码更加健壮 静态cookie可视绕过登录的限制 快代理是一个代理平台 # https://movie.douban.com/j/chart/top_list?type5&interval_id100%3A90&action& # start0&limit20# https://movie.douban.com/j/chart/top_list?type5&int…

【数据结构】 归并排序超详解

1.基本思想 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide andConquer&#xff09;的一个非常典型的应用。 将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff0c;即先使每个子序列有序…

Vue3的Props

Vue 3中的props是用于接收父组件传递的数据的属性。在Vue 3中&#xff0c;props的声明发生了一些改变&#xff1a; 使用props选项来声明props。之前的版本中使用props属性来声明&#xff0c;但在Vue 3中改为使用props选项。通过TypeScript或Flow来静态类型检查props。Vue 3允许…

Spring实现事务(一)

Spring事务 .什么是事务事务的操作Spring中事务的实现准备工作创建表创建项目,引入Spring Web, Mybatis, mysql等依赖配置文件实体类 编程式事务(手动写代码操作事务)声明式事务(利用注解自动开启和提交事务) . 什么是事务 事务是⼀组操作的集合, 是⼀个不可分割的操作 在我们…

国产校准件

国产校准件 Ceyear系列校准件是矢量网络分析仪的测试附件&#xff0c;可大幅提高矢量网络分析仪的测试精度。规格品种丰富&#xff0c;涵盖多种同轴、波导校准件&#xff0c;校准精度高&#xff0c;重复性好 功能特点 校准件 校准模块可实现更精准的测量&#xff0c;满足您的测…

RK3588平台开发系列讲解(视频篇)H.264码流结构介绍

文章目录 一、 码流查看工具二、 I帧、 P帧、 B帧三、序列四、GOP, 即关键帧间隔五、片和宏块沉淀、分享、成长,让自己和他人都能有所收获!😄 📢H.264码流结构介绍。 一、 码流查看工具 ① H.264码流查看工具: Elecard_streamEye、 Elecard StreamEye Tools、 Special…

020 switch多选择结构

什么是switch多选择结构 switch语句中的变量类型为char的示例 char grade A; switch (grade){case A:System.out.println("成绩为A");break;case B:System.out.println("成绩为B");break;case C:System.out.println("成绩为C");break;case D:S…

2. HarmonyOS应用开发DevEcoStudio准备-1

2. HarmonyOS应用开发DevEcoStudio准备-1 下载 DevEco Studio 进入HUAWEI DevEco Studio产品页产品页。 单击下载列表右侧的按钮&#xff0c;下载 DevEco Studio。 安装 DevEco Studio 下载完成后&#xff0c;双击下载的 deveco-studio-xxxx.exe&#xff0c;进入 DevEco St…

基于SSM的高校社团管理系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 我欲乘风归去 又恐琼楼玉宇 高处不胜寒 -苏轼 目录 一、项目简介 二、开发技术与环境配置 2.1 SSM框架 2.2 …

使用STM32的FMC/FSMC接口实现多路数据传输和并发操作的设计与应用

在基于STM32的系统中&#xff0c;FMC&#xff08;Flexible Memory Controller&#xff09;/FSMC&#xff08;Flexible Static Memory Controller&#xff09;接口可以用于实现多路数据传输和并发操作。通过合理的设计和应用&#xff0c;我们可以提高系统的数据处理速度和效率。…

P1228 地毯填补问题

地毯填补问题 题目描述 相传在一个古老的阿拉伯国家里&#xff0c;有一座宫殿。宫殿里有个四四方方的格子迷宫&#xff0c;国王选择驸马的方法非常特殊&#xff0c;也非常简单&#xff1a;公主就站在其中一个方格子上&#xff0c;只要谁能用地毯将除公主站立的地方外的所有地…

数据可视化 pycharts实现时间数据可视化

自用版 数据格式为&#xff1a; 运行效果为&#xff1a; from pyecharts import options as opts from pyecharts.charts import Polar, Page import csv filename "./hot-dog-places.csv" data_x [] data_y [] with open(filename) as f:reader csv.reade…

前端使用cache storage实现远程图片缓存

Cache Storage 的主要特点和用途 缓存网络资源&#xff1a;可以将经常访问的网络资源缓存到 Cache Storage 中&#xff0c;以提高网页加载速度&#xff0c;减少网络请求。离线访问&#xff1a;当用户处于离线状态时&#xff0c;可以使用 Cache Storage 中的缓存资源来加载网页…

【系统设计】12306架构设计难点(下)

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…

实现两栏布局和三栏布局的多种详细方法

目录 一、背景两栏布局三栏布局 二、两栏布局flex弹性布局 三、三栏布局两边使用 float&#xff0c;中间使用 margin两边使用 absolute&#xff0c;中间使用 margin两边使用 float 和负 margin使用 display: table 实现使用flex实现grid网格布局 参考文献 一、背景 在日常布局…

永磁同步电机速度环闭环控制

文章目录 1、速度环分析2、电机参数3、PI计算4、模型仿真4.1 模型总览4.2 实际转速与参考转速对比4.3 转矩波形4.4 相电流采样波形 模型下载地址&#xff1a; 链接: 速度闭环模型&#xff08;速度电流双闭环&#xff09; 1、速度环分析 2、电机参数 Udc24 V Rs0.6 LdLq1.4e-3…