100天精通鸿蒙从入门到跳槽——第3天:TypeScript 知识储备:类型系统

发布时间:2024年01月17日

在这里插入图片描述


博主猫头虎的技术世界

🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能!

专栏链接

🔗 精选专栏

100天精通鸿蒙从入门到跳槽——第3天:TypeScript 知识储备:类型系统

摘要 🌟

亲爱的读者们,今天是我们100天精通鸿蒙之旅的第3天🚀,我们将深入探讨TypeScript的类型系统。这个系统是TypeScript的精髓,涵盖了类型声明、类型推断、类型检查以及确保类型安全等核心概念。我会通过简洁的解释和实际的代码示例📝,带大家领略TypeScript类型系统的强大之处。掌握这些知识,将为你的鸿蒙开发之旅增添坚实的基石,提升代码的可读性、可维护性和可靠性。

在这里插入图片描述

一、 引言 📘

在我们的鸿蒙开发历程中,TypeScript 是一颗耀眼的星辰?。它之所以如此闪耀,很大程度上归功于其类型系统。这个系统不仅仅是一堆枯燥的规则,而是一种强有力的工具🔧,它能够帮助我们更好地理解和表达代码的结构和行为。在今天的文章中,我会带你一步步了解TypeScript的类型系统,从类型声明到类型安全,让你在编写代码时,能够更加自如地表达你的意图,并减少错误的发生。

二、正文📝

1. 类型声明

TypeScript 中的类型声明允许开发者明确指定变量、函数、接口和类的类型。通过使用类型声明,开发者可以提供更多的语义信息,使代码更容易理解和维护。

当你在 TypeScript 中进行类型声明时,可以使用以下代码案例来演示如何明确指定变量、函数、接口和类的类型:

变量类型声明:

let name: string = "John"; 
const age: number = 30; 

在上述示例中,通过 : string: number 分别指定了 nameage 的类型为 stringnumber

函数类型声明:

function add_numbers(a: number, b: number): number { 
    return a + b; 
}

在上述示例中,通过在函数参数和返回值上使用类型声明,明确了 add_numbers 函数接受两个 number 类型的参数,并返回一个 number 类型的结果。

接口类型声明:

interface Person { 
    name: string; 
    age?: number; 
}

在上述示例中,通过创建一个 Person 接口,定义了包含 name 属性(类型为 string)和可选的 age 属性(类型为 number)的对象类型。

类类型声明:

class Student { 
    name: string; 
    age: number; 
    constructor(name: string, age: number) { 
        this.name = name; 
        this.age = age; 
    } 
}

在上述示例中,通过创建一个 Student 类,定义了包含 nameage 属性的类,并在构造函数中接受对应类型的参数。

这些代码案例展示了如何在 TypeScript 中使用类型声明来明确变量、函数、接口和类的类型,提供了更多的语义信息,有助于提高代码的可理解性和维护性。

2. 类型推断

TypeScript 具有强大的类型推断能力,可以根据代码的上下文自动推断变量和函数的类型。这有助于减少冗余的类型声明,并提高编码效率。
以下是一个代码案例来说明:

let name = "John"; 
// 类型被自动推断为 string
name = 30; 
// 报错:类型“number”的分配给类型“string”的变量是不兼容的

在上述示例中,当你初始化一个变量 name 为字符串时,TypeScript 会根据赋值操作自动推断该变量的类型为 string。随后,如果你尝试将一个数字赋值给 name,则会触发类型错误,因为类型不兼容。

同样,对于函数也可以进行类型推断:

function add(a: number, b: number): number { 
    return a + b; 
}
// 类型被自动推断为 number
let result = add(5, 10); 

在上述示例中,定义了一个名为 add 的函数,它接受两个 number 类型的参数并返回一个 number 类型的结果。当你调用 add 函数并传递相应的参数时,TypeScript 会自动推断返回值的类型为 number

通过类型推断,TypeScript 可以减少冗余的类型声明,提高编码效率。但在某些情况下,明确的类型声明仍然是必要的,特别是当代码的可读性和清晰度更为重要时。

3. 类型检查

在编译阶段,TypeScript 会进行类型检查,确保代码中的类型一致性和正确性。如果发现类型错误,编译器会提供明确的错误提示,帮助开发者快速定位和修复问题。

以下是一个代码案例:

function add(a: number, b: number): number {
    return a + b;
}
console.log(add(5, "5")); 

上述代码中,add 函数期望接收两个 number 类型的参数,并返回一个 number 类型的结果。然而,在调用 add 函数时,传递了一个字符串 "5" 作为第二个参数,这导致了类型不匹配。因此,在编译阶段,TypeScript 会产生错误,提示 Argument of type 'string' is not assignable to parameter of type 'number'。这有助于开发者快速识别和修正问题,确保代码的正确性和稳定性。

4. 类型安全

TypeScript 的类型系统可以帮助开发者避免一些常见的编程错误,如类型不匹配、空值引用等。通过强制类型检查,TypeScript 可以提高代码的可靠性和稳定性。

以下是一个代码案例来说明:

let name: string = null; 
name = "John"; 
// 报错:不能将“null”分配给类型“string”的属性“name”

在上述示例中,尝试将 null 赋值给一个 string 类型的变量 name,这会导致类型错误。TypeScript 的类型检查在编译阶段会捕获到这个错误,并提示不能将 null 分配给 string 类型的属性。

通过使用类型系统,TypeScript 可以帮助开发者在编写代码时更早地发现和修正这些类型错误,避免在运行时出现意外情况。这有助于提高代码的质量和可维护性,减少潜在的错误和崩溃。

需要注意的是,类型检查并不会完全消除所有的错误,但它可以提供额外的一层保障,帮助开发者编写更可靠和稳定的代码。

5. 泛型

TypeScript 中的泛型是一种通用的类型参数化机制,可以用于创建可复用的函数和类型,提高代码的灵活性和扩展性。

下面是一个代码案例,展示了如何在 TypeScript 中使用泛型来创建一个具有通用性的函数,用于对不同类型的数组进行排序:

function sortArray<T>(arr: T[]): T[] {
    return arr.sort((a, b) => a - b);
}

const numArr = [2, 8, 1, 3];
const strArr = ["apple", "banana", "orange"];

console.log(sortArray(numArr));
console.log(sortArray(strArr));

在上述代码中,定义了一个泛型函数 sortArray,它接受一个类型为 T 的数组作为参数,并返回一个类型为 T 的排序后的数组。在函数内部,使用 arr.sort((a, b) => a - b) 对数组进行排序。然后,创建了两个不同类型的数组 numArr(数字数组)和 strArr(字符串数组),并分别调用 sortArray 函数对它们进行排序。最后,将排序后的结果打印到控制台上。

三、 总结 📌

今天,我们深入了解了TypeScript的类型系统,这是提升你在鸿蒙开发领域中成为高手的重要一步🌈。我们讨论了类型声明、类型推断、类型检查和类型安全等关键概念,这些都是构建稳固、可靠代码的基石。记住,一个好的程序员不仅要写出能运行的代码,更要写出清晰、易维护且可靠的代码🛠?。TypeScript的类型系统正是我们实现这一目标的有力工具。明天,我们将继续我们的学习之旅,希望你能保持热情和好奇心,因为每一天,我们都在向成为鸿蒙开发高手迈进!

四、参考资料📝

[1] TypeScript 官方文档
[2] 《TypeScript 入门经典》

👉 更多信息:对《100天精通鸿蒙》专栏感兴趣吗?别忘了点击文末名片或者下方链接加入我们的学习群。我是猫头虎博主,期待与您的交流! 🦉💬
领域矩阵

🌐 猫头虎技术领域矩阵
深入探索各技术领域,发现知识的交汇点。了解更多,请访问:

🚀 技术栈推荐
JS, TS,ArkTS 等前端技术

💡 联系与版权声明

📩 联系方式

  • 微信: Libin9iOak
  • 公众号: 猫头虎技术团队

?? 版权声明
本文为原创文章,版权归作者所有。未经许可,禁止转载。更多内容请联系作者猫头虎@阿珊和她的猫

点击下方名片,加入猫头虎技术社群矩阵。与我们一起在《100天精通鸿蒙》的旅程中,探索HarmonyOS的奥秘,共同成长。


文章来源:https://blog.csdn.net/qq_44866828/article/details/135644585
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。