当前位置: 首页 > article >正文

【愚公系列】《鸿蒙原生应用开发从零基础到多实战》006-TypeScript 中的元组

标题详情
作者简介愚公搬代码
头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。
近期荣誉2022年度博客之星TOP2,2023年度博客之星TOP2,2022年华为云十佳博主,2023年华为云十佳博主,2024年华为云十佳博主等。
博客内容.NET、Java、Python、Go、Node、前端、IOS、Android、鸿蒙、Linux、物联网、网络安全、大数据、人工智能、U3D游戏、小程序等相关领域知识。
欢迎👍点赞、✍评论、⭐收藏

文章目录

  • 🚀前言
  • 🚀一、🌟 TypeScript 核心特性详解:元组、枚举与面向对象编程
    • 🔎1.数组与元组的本质区别
    • 🔎2.元组深度解析
      • 🦋2.1 元组操作规范
      • 🦋2.2 元组解构应用
    • 🔎3.枚举类型实战
      • 🦋3.1 基础枚举定义
      • 🦋3.2 显式值设置
    • 🔎4.面向对象编程实践
      • 🦋4.1 接口与抽象类
      • 🦋4.2 具体类实现
      • 🦋4.3 实例化与使用
    • 🔎5.关键概念解析
    • 🔎6.调试与优化建议


🚀前言

在现代JavaScript和TypeScript的开发中,数据结构的灵活性和强类型特性显得尤为重要。元组(Tuple)作为TypeScript的一种独特数据结构,为我们提供了一种强大的方式来处理和组织不同类型的数据。与数组类似,元组可以存储多个值,但与数组不同的是,元组的每个元素可以具有不同的数据类型,并且其长度是固定的。这一特性使得元组在处理复杂数据时,尤其是在函数参数、API响应等场景中,展现出了极大的便利性。

在本文中,我们将深入探讨TypeScript中的元组,包括其基本概念、定义方式及应用实例。通过具体的代码示例,你将学习到如何创建元组,如何访问和修改元组中的数据,以及在实际开发中如何灵活运用元组来提高代码的可读性和可维护性。

🚀一、🌟 TypeScript 核心特性详解:元组、枚举与面向对象编程

🔎1.数组与元组的本质区别

特性数组 (Array)元组 (Tuple)
元素类型单一类型(any[]允许混合类型)固定顺序的多类型组合
类型声明number[]Array<string>[类型1, 类型2,...]
越界处理自动扩展为数组类型扩展元素需满足联合类型
典型应用同质数据集合(如用户ID列表)异构数据结构(如API返回状态码+消息体)

代码对比:

// 数组
const numArr: number[] = [1, 2, 3];
const mixedArr: (string | number)[] = ['a', 1]; 

// 元组
let userInfo: [number, string, boolean] = [1, 'admin', true];

🔎2.元组深度解析

🦋2.1 元组操作规范

// 正确定义
let point: [number, number] = [10, 20]; 

// 类型顺序错误
point = ['x', 30]; // ❌ Type 'string' is not assignable to 'number'

// 越界赋值(联合类型生效)
point.push(30); // ✅ 合法,但无法通过索引访问point[2]

🦋2.2 元组解构应用

const response: [number, string] = [200, 'OK'];
const [statusCode, message] = response;
console.log(`状态码: ${statusCode}, 消息: ${message}`);

🔎3.枚举类型实战

🦋3.1 基础枚举定义

// 数值型枚举(默认从0开始)
enum Direction { Up, Down, Left, Right }

// 字符串枚举
enum LogLevel { 
  Info = 'INFO',
  Error = 'ERROR'
}

// 混合枚举(不推荐)
enum Status { 
  Success = 200,
  Fail = 'FAIL'
}

🦋3.2 显式值设置

// 显式赋值示例
enum Gear {
  First = 1,    // 显式设置为1
  Second = 3,   // 跳跃赋值
  Third = 5
}

console.log(Gear.Second); // 输出: 3

🔎4.面向对象编程实践

🦋4.1 接口与抽象类

// 驾驶行为接口
interface Drivable {
  start(): void;
  drive(time: number, speed: Gear): void;
  getKilometer(): number;
}

// 抽象类实现接口
abstract class Car implements Drivable {
  protected _isRunning: boolean = false;
  protected _distance: number = 0;

  public start(): void {
    this._isRunning = true;
  }

  public abstract drive(time: number, speed: Gear): void;

  public getKilometer(): number {
    return this._distance;
  }
}

🦋4.2 具体类实现

// BMW子类(泛型应用)
class BMW<T extends Color> extends Car {
  private color: T;

  constructor(colorType: T) {
    super();
    this.color = colorType;
  }

  public drive(time: number, speed: Gear): void {
    if (this._isRunning) {
      this._distance += time * speed;
    }
  }

  public getColor(): string {
    return Color[this.color];
  }
}

🦋4.3 实例化与使用

// 实例创建与操作
const myBMW = new BMW(Color.Red);
myBMW.start();
myBMW.drive(2, Gear.First);   // 2小时 × 1档速度
myBMW.drive(1.5, Gear.Third); // 1.5小时 × 5档速度

// DOM输出
document.body.innerHTML = `
  总里程: ${myBMW.getKilometer()}km 
  颜色: ${myBMW.getColor()}
`;

🔎5.关键概念解析

  1. 联合类型 (|)
    允许变量为多种类型之一:let value: string | number

  2. 泛型约束 (<T extends Type>)
    确保泛型参数符合特定类型要求

  3. 访问修饰符

    • public: 默认可见性
    • protected: 仅类及子类可访问
    • private: 仅类内部可访问
  4. 抽象类特性

    • 不可直接实例化
    • 必须实现接口中的抽象方法
    • 可包含具体方法实现

🔎6.调试与优化建议

  1. 元组类型安全
    使用readonly修饰防止意外修改:

    const config: readonly [string, number] = ['localhost', 8080];
    
  2. 枚举反向映射
    数值型枚举支持反向查找:

    enum Gear { First = 1 }
    console.log(Gear[1]); // 输出: "First"
    
  3. 性能优化
    频繁创建对象时考虑对象池模式


http://www.kler.cn/a/568782.html

相关文章:

  • 从 Transformer 到 DeepSeek-R1:大型语言模型的变革之路与前沿突破
  • 深入浅出 Go 语言:协程(Goroutine)详解
  • arxiv论文信息爬取与论文pdf下载
  • 游戏引擎学习第128天
  • 【C++经典例题】回文串判断:两种高效解法剖析
  • k8s 中各种发布方式介绍以及对比
  • 本地部署SenseVoice(包括离线设备操作)
  • Java语法基础知识点2
  • 达梦数据库系列之Mysql项目迁移为达梦项目
  • 基于html的俄罗斯方块小游戏(附程序)
  • 技术问题汇总:前端怎么往后端传一个数组?
  • DeepSeek 与大数据治理:AI 赋能数据管理的未来
  • 第十五届蓝桥杯最后一题 拔河问题
  • 各种传参形式
  • 深入探索 STM32 微控制器:从基础到实践
  • 每日一题——接雨水
  • 2.Exercise
  • 关于时间序列预测
  • 3.16 AI Agent 技术全景解析:从核心能力到企业级应用实践
  • GPT-4.5震撼登场,AI世界再掀波澜!(3)