TypeScript - T推断: 初学者的指南

你好啊,未来的编程巨星!今天,我们将踏上一段激动人心的旅程,探索TypeScript的世界,并了解其最酷的功能之一:类型推断。如果你是编程新手,不用担心;我会成为你的友好向导,我们会一步步来。在这个教程结束时,你会惊叹于TypeScript有多么聪明!

TypeScript - Type Inference

什么是类型推断?

在我们深入研究之前,让我们先了解一下类型推断的含义。想象你有一个神奇的朋友,他只需看着你就能猜出你在想什么。TypeScript对你的代码做的就是类似的事情。它查看你的代码,试图弄清楚你的变量应该是什么类型,而不需要你明确告诉它。酷吧?

现在,让我们探索TypeScript使用其神奇推断力量的不同方式!

变量或成员初始化

基础知识

当你创建一个变量并立即给它一个值时,TypeScript可以推断出该变量应该是什么类型。让我们看一些例子:

let myName = "Alice";
let myAge = 25;
let isStudent = true;

在这段代码中,TypeScript推断出:

  • myName 是一个 string
  • myAge 是一个 number
  • isStudent 是一个 boolean

你不需要写 let myName: string = "Alice"; 因为TypeScript足够聪明,可以推断出来!

更复杂的例子

TypeScript也可以处理更复杂的类型:

let myFavoriteNumbers = [1, 2, 3, 4, 5];
let myPet = { name: "Fluffy", type: "Cat", age: 3 };

在这里,TypeScript推断出:

  • myFavoriteNumbers 是一个数字数组 (number[])
  • myPet 是一个具有特定属性的对象(TypeScript创建了我们所说的“对象字面量类型”)

函数默认参数

TypeScript还可以从函数的默认参数中推断类型。让我们看一个例子:

function greet(name = "Guest") {
console.log(`Hello, ${name}!`);
}

在这个函数中,TypeScript推断出 name 是一个 string,因为默认值是一个字符串。

你可以用不同的方式调用这个函数:

greet(); // 输出: Hello, Guest!
greet("Alice"); // 输出: Hello, Alice!

函数返回类型

TypeScript足够聪明,可以根据函数返回的内容推断函数的返回类型。让我们看一些例子:

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

function isEven(num: number) {
return num % 2 === 0;
}

TypeScript推断出:

  • add 返回一个 number
  • isEven 返回一个 boolean

你不需要写 function add(a: number, b: number): number 因为TypeScript会推断出来!

最好的公共类型:联合类型

有时,TypeScript需要从多个表达式中推断类型。在这些情况下,它使用我们所说的“最佳公共类型”算法。让我们看一个例子:

let mixedArray = [1, "two", 3, "four", 5];

在这里,TypeScript推断 mixedArray 的类型为 (string | number)[]。这意味着它是一个可以包含字符串和数字的数组。

上下文类型

上下文类型是当TypeScript使用代码的上下文来推断类型时。这在处理回调函数和函数参数时特别有用。让我们看一个例子:

let numbers = [1, 2, 3, 4, 5];

numbers.forEach(function(num) {
console.log(num.toFixed(2));
});

在这个例子中,TypeScript知道在数字数组上使用 forEach 会传递一个数字给回调函数。所以它推断 num 是一个数字,这就是为什么你可以在不出现任何错误的情况下使用 toFixed()

结论

好了,各位!我们已经穿越了TypeScript类型推断的神奇世界。从简单的变量赋值到复杂的函数返回类型和上下文类型,TypeScript始终在努力理解你的代码,让你的生活更轻松。

记住,类型推断就像有一个聪明的助手,帮助你编写更干净、更无错误的代码。它并不完美,有时你可能需要通过显式类型注解来帮助它,但大多数时候,它会支持你!

继续练习,继续编码,很快你将成为TypeScript的魔法师!快乐编码,愿类型永远在你这边!

Credits: Image by storyset