【HormonyOS4+NEXT】TypeScript基础语法详解

news2024/12/23 22:14:54

在这里插入图片描述

🙋‍ 一日之际在于晨
⭐本期内容:TypeScript基础语法详解
🏆系列专栏:鸿蒙HarmonyOS4+NEXT:探索未来智能生态新纪元


文章目录

  • 前言
  • 变量与类型
  • 函数
  • 类与接口
    • 类(Class)
    • 接口(Interface)
    • 函数与接口的使用
    • 对象的创建与函数的使用
  • 泛型
  • 总结


前言

TypeScript是一种由微软开发的开源编程语言,它是JavaScript的一个超集,添加了静态类型、类、接口和泛型等特性。这些特性使得TypeScript在大型项目中具有更好的可维护性和可扩展性。本文将对TypeScript的基础语法进行详细讲解,帮助读者快速入门。


变量与类型

TypeScript的核心特性之一就是静态类型系统。这意味着在声明变量时,我们可以为其指定一个类型,这样TypeScript编译器就可以在编译时检查类型错误。

例如:let msg:string=‘hello world’
其中:let为声明变量的关键字,const则代表常量, msg为变量名,是自定义的 string是变量的数据类型

常见的类型有:

  • string:字符串,可以用单引号或者双引号
let greeting: string = "Hello, World!";  
let quote: string = 'To be or not to be, that is the question.';
  • number:数值、整数、浮点数都可以
let age: number = 30;  
let price: number = 19.99;
  • any:不确定类型,可以是任意类型
let notSure: any = 4;  
notSure = "maybe a string instead";  
notSure = false;

- union:联合类型,可以是多个指定类型中的一种

let greet: string | number;  
greet = "Hello"; // OK  
greet = 42; // OK  
// greet = true; // Error, boolean is not string or number

  • Object:对象(注意:在TypeScript中,使用 {} 来表示一个空对象类型,而 Object 实际上指向的是非原始类型)
let person: object = {  
  name: "Alice",  
  age: 25  
};
  • Array:数组、元素可以是任意其他类型
let numbers: number[] = [1, 2, 3, 4, 5];  
let strings: string[] = ["red", "green", "blue"];  
let mixed: (number | string)[] = [1, "two", 3, "four"];

注意,对于 object 类型,实际上在TypeScript中,使用 {} 来定义一个空对象类型可能更加精确,因为它不会接受原始值(如 string、number 等)。而 Object 类型在TypeScript中是一个特殊的类型,它是所有类型的超类型,包括原始类型。因此,使用 Object 类型作为变量类型时,可以为其分配任何类型的值。

在定义数组时,我们通常使用类型后跟方括号的语法,例如 number[] 表示数字数组。如果需要数组中的元素可以是多种类型,可以使用联合类型,例如 (number | string)[] 表示数组中的元素可以是数字或字符串。

函数

在TypeScript中,我们可以为函数参数和返回值指定类型。这有助于我们在编写函数时明确函数的输入和输出,从而提高代码的可读性和可维护性。
如下,我们定义了一个名为greeter的函数,它接受一个string类型的参数person,并返回一个string类型的结果。然后,我们调用这个函数并传入一个字符串变量user作为参数。
注意:在TypeScript中,空字符串、数字0、null、undefined都被认为是false,其它值则为true。

function greeter(person: string): string {  
    return "Hello, " + person;  
}  
  
let user = "Jane";  
console.log(greeter(user));

类与接口

在 TypeScript 中,类和接口是面向对象编程的两个核心概念。类(Class)是一种用户自定义的数据类型,它包含属性和方法,可以用来创建对象。接口(Interface)定义了一个对象的结构,它规定了一个对象应该有哪些属性和方法,但不提供具体的实现。

类(Class)

在这个 Animal 类中:
name 是一个属性,用来存储动物的名字。
constructor 是类的构造函数,用于创建类的实例,并初始化 name 属性。
move 是一个方法,用于描述动物移动的行为。注意,move 方法有一个默认参数 distanceInMeters,其默认值为 0。

class Animal {    
    name: string;  // 类的属性  
    
    constructor(theName: string) {  // 类的构造函数  
        this.name = theName;  // 在构造函数中初始化属性  
    }    
    
    move(distanceInMeters: number = 0) {  // 类的方法  
        console.log(`${this.name} moved ${distanceInMeters}m.`);    
    }    
}

接口(Interface)

Person 接口定义了一个对象应该具有 firstName 和 lastName 两个属性,并且这两个属性都是字符串类型。

interface Person {    
    firstName: string;  // 接口的属性  
    lastName: string;  // 接口的属性  
}

函数与接口的使用

greeter 函数接受一个参数 person,该参数的类型是 Person 接口。这意味着任何传递给 greeter 函数的对象都必须具有 firstName 和 lastName 属性。

function greeter(person: Person) {  // 函数接受一个符合Person接口的对象  
    return "Hello, " + person.firstName + " " + person.lastName;  // 使用接口的属性  
}

对象的创建与函数的使用

这里创建了一个对象 user,它符合 Person 接口的规范(即具有 firstName 和 lastName 属性)。然后,我们将 user 对象传递给 greeter 函数,并打印返回的问候字符串。

let user = { firstName: "Jane", lastName: "User" };  // 创建一个符合Person接口的对象  
console.log(greeter(user));  // 调用greeter函数并打印结果

泛型

在 TypeScript 中,泛型(Generics)是一种创建可重用组件的方式,这些组件可以处理多种数据类型,而不是单一的数据类型。泛型允许我们定义函数、接口或类,其中的类型参数可以在使用这些组件时指定。这使得代码更加灵活和可维护,因为我们可以编写一次代码,然后在多种数据类型上重复使用。

如下例子:identity 函数是一个泛型函数,它接受一个类型为 T 的参数,并返回相同类型的值。这里的 T 是一个类型参数,它代表了在函数被调用时可以指定的任意类型。
让我们详细分析一下这个代码:

function identity<T>(arg: T): T {    
    return arg;    
}

在上面的代码中:

< T>:定义了类型参数 T。这告诉 TypeScript,我们打算在函数中使用一个或多个类型作为参数。
arg: T:函数参数 arg 的类型被指定为 T,意味着它可以是任何类型。
return arg;:函数返回与参数相同的值,其类型也是 T。
接着,创建了一个 myIdentity 变量,并将 identity 函数赋值给它。这里使用了另一种语法来指定泛型类型参数。

let myIdentity: <T>(arg: T) => T = identity;

这里,myIdentity 的类型被定义为接受一个类型为 T 的参数并返回相同类型的函数。它实际上是对 identity 函数的一个引用,因此我们可以通过 myIdentity 来调用 identity 函数。
最后使用 myIdentity 函数来处理不同类型的值:

console.log(myIdentity<string>("hello")); // 输出 "hello"  
console.log(myIdentity<number>(42)); // 输出 42

myIdentity< string>(“hello”):在这里,显式地指定了 T 为 string 类型,并传递了一个字符串 “hello” 作为参数。函数返回这个字符串,并输出到控制台。
myIdentity< number>(42):类似地,指定了 T 为 number 类型,并传递了一个数字 42。函数返回这个数字,并输出到控制台。


总结

今日之学习篇章已然落笔,愿诸君有所收获。🤩
倘若您对此深感兴趣,不妨关注此专栏,新知将持续涌现,与您共舞思维的华章。😎
期待下次再会,愿我们于知识的海洋中,再度相聚,共赏智慧之花绽放。👍
在这里插入图片描述

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

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

相关文章

基于51单片机点滴输液控制系统LCD显示( proteus仿真+程序+设计报告+讲解视频)

基于51单片机点滴输液控制系统LCD显示 1. 主要功能&#xff1a;2. 讲解视频&#xff1a;3. 仿真设计4. 程序代码5. 设计报告6. 设计资料内容清单&&下载链接 基于51单片机点滴输液控制系统LCD显示( proteus仿真程序设计报告讲解视频&#xff09; 仿真图proteus7.8及以上…

Ubuntu上安装Chrome浏览器

安装步骤 1.下载安装chrome安装包 wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb2.安装Chrome浏览器 sudo dpkg -i google-chrome-stable_current_amd64.debsudo apt-get -f install3.启动Chrome浏览器 查看收藏夹里的Chrome图标 单击C…

【已开源】​基于stm32f103的爬墙小车

​基于stm32f103的遥控器无线控制爬墙小车&#xff0c;实现功能为可平衡在竖直墙面上&#xff0c;并进行移动和转向&#xff0c;具有超声波防撞功能。 直接上&#xff1a; 演示视频如&#xff1a;哔哩哔哩】 https://b23.tv/BzVTymO 项目说明&#xff1a; 在这个项目中&…

前端开发攻略---从源码角度分析Vue3的Propy比Vue2的defineproperty到底好在哪里。一篇文章让你彻底弄懂响应式原理。

1、思考 Vue的响应式到底要干什么&#xff1f; 无非就是要知道当你读取对象的时候&#xff0c;要知道它读了。要做一些别的事情无非就是要知道当你修改对象的时候&#xff0c;要知道它改了。要做一些别的事情所以要想一个办法&#xff0c;把读取和修改的动作变成一个函数&#…

ESXi 无法启动NTP守护进程

在VMware ESXi环境中如果遇到无法启动NTP&#xff08;Network Time Protocol&#xff09;守护进程的问题&#xff0c;可以通过以下步骤进行排查和解决&#xff1a; 步骤1&#xff1a;检查与修复配置文件 登录到ESXi Shell&#xff08;SSH&#xff09;。编辑 /etc/ntp.conf 配…

北京InfoComm展推出500款新品,覆盖30个市场,助力行业未来

【2024年4月17日——北京讯】亚太区首屈一指的专业视听和集成体验解决方案展北京InfoComm China 2024 今天在北京的国家会议中心 (CNCC) 盛大开幕&#xff0c;展开为期三天的商贸展会和高峰会议。作为行业产品发布的首要平台&#xff0c;北京InfoComm China吸引众多展商携新品推…

使用vite从头搭建一个vue3项目(二)创建目录文件夹以及添加vue-router

目录 一、创建 vue3 项目 vite-vue3-project-js二、创建项目目录三、创建Home、About组件以及 vue-router 配置路由四、修改完成后页面 一、创建 vue3 项目 vite-vue3-project-js 使用 vite 创建一个极简 vue3 项目请参考此文章&#xff1a;使用vite从头搭建一个vue3项目&…

Android 使用ping命令判断当前网络状态

一. 介绍 ping命令是用来测试和诊断网络连接问题的基本命令&#xff0c;当然我们的终端设备&#xff08;手机/平板/车机&#xff09;都可以用这个命令来判断当前网络是否有流量的状态&#xff0c;本篇文章主要介绍Linux的ping命令&#xff0c;因为Android系统也是使用了Linux内…

Latex学习(从入门到入土)2

第一章 &#xff1a;插图 在LaTeX中插入插图可以通过graphicx宏包来实现&#xff0c;这个宏包提供了强大的图像处理功能。以下是如何使用graphicx宏包插入图像的基本步骤&#xff1a; ### 1. 加载宏包 在文档的序言部分&#xff08;\begin{document}之前&#xff09;&#x…

char和varchar的区别?

一、问题解析 char和varchar都是用于在数据库中存储字符串的数据类型。它们之间的主要区别在于存储空间的使用方式&#xff1a; char是一种定长的数据类型&#xff0c;它的长度固定且在存储时会自动在结尾添加空格来将字符串填满指定的长度。char的长度范围是0-255&#xff0c…

Redis之路系列(3)纸上得来终觉浅(下)

03 纸上得来终觉浅(下) 基于Redis6&#xff0c;本章节主要介绍了Rdis的一些主要应用场景&#xff0c;包含了&#xff1a;大数据的过滤&#xff0c;分布式锁设计&#xff0c;并讲解了有趣的布隆过滤器原理&#xff0c;HyperLogLog 原理&#xff0c;二进制位数与存储大小计算的常…

MinlO以及阿里云OSS对象存储服务

MinlO MinIO是一个开源的对象存储系统&#xff0c;专为云原生和容器化环境而设计。它使用分布式架构来存储和管理大规模的非结构化数据&#xff0c;例如图片、视频、日志文件等。MinIO基于Amazon S3协议&#xff0c;并提供了与S3兼容的API&#xff0c;这使得它能够与现有的S3生…

2.6 类型安全配置属性

无论是Propertes配置还是YAML配置&#xff0c;最终都会被加载到Spring Environment中。 Spring提供了注解Value以及EnvironmentAware接口来将Spring Environment 中的数据注入到属性上&#xff0c;SpringBoot对此进一步提出了类型安全配置属性(Type-safeConfiguration Propert…

「每日跟读」英语常用句型公式 第14篇

「每日跟读」英语常用句型公式 第14篇 1. As far as __ is concerned 就__ 而言 As far as the project timeline is concerned, we’re running ahead of schedule. &#xff08;就项目时间表而言&#xff0c;我们进度超前了。&#xff09; As far as the exam results ar…

mysql performance schema 实践

参考MySQL调优性能监控之performance schema,做了一些扩展 1 2、哪类SQL的平均响应时间最多 SUM_NO_INDEX_USED>0用来过滤那些没有使用的查询。 SELECT SCHEMA_NAME,DIGEST_TEXT,AVG_TIMER_WAIT,MAX_TIMER_WAIT,SUM_LOCK_TIME,SUM_ERRORS ,SUM_SELECT_FULL_JOIN,SUM_NO_IND…

App Inventor 2 块拓展之:最大值、创建多项列表

什么是块拓展&#xff1f; App Inventor 2 引入了一项新功能&#xff0c;允许某些块扩展、收缩甚至更改其功能。 顶部具有蓝色框白色齿轮的代码块都是可拓展块。 块拓展用法 块扩展可以改变形状&#xff0c;通过单击蓝色图标&#xff0c;用户可以将较小的块拖到较大的块中&am…

刷题。。。。。。

1.ezmd5 根据题目提示 我们知道应该是要上传两张md5值相同的图片 根据原文链接&#xff1a;cryptanalysis - Are there two known strings which have the same MD5 hash value? - Cryptography Stack Exchange 把保存下来的图片上传一下 得到flag 2.ezhttp 根据原文链接&…

SSH安全设置

今天发现自己的公有云服务器被攻击了 然后查看了登录日志&#xff0c;如上图 ls -sh /var/log/secure vim /var/log/secure然后增加了安全相关的设置 具体可以从以下方面增加安全性&#xff1a; 修改默认SSH端口公有云修改安全组策略及防火墙端口设置登录失败次数锁定用户及限…

[dvwa] sql injection(Blind)

blind 0x01 low 1’ and length(version()) 6 # syntax: substr(string , from<start from 1>, cut length) 1’ and substr(version(),1,1) ‘5’ # 1’ and substr(version(),2,1) ‘.’ # 1’ and substr(version(),3,1) ‘7’ # 1’ and substr(version(),4,…

废液收集系统物联网远程监控解决方案

废液收集系统物联网远程监控解决方案 在面对日益严峻的环保压力和严格的法律法规要求下&#xff0c;构建一套高效、智能的废液收集系统物联网远程监控解决方案显得尤为重要。该方案旨在通过深度融合物联网技术、云计算、大数据分析等先进手段&#xff0c;实现对废液收集系统的…