TypeScript - Type Inference: A Beginner's Guide

Здравствуйте, будущий суперзвезда программирования! Сегодня мы отправимся в увлекательное путешествие в мир TypeScript и рассмотрим одну из его coolest функций:推理类型 (Type Inference). Не волнуйтесь, если вы новички в программировании; я буду вашим доброжелательным проводником, и мы будем двигаться шаг за шагом. К концу этого руководства вы будете удивлены, насколько умным может быть TypeScript!

TypeScript - Type Inference

Что такое推理类型?

Прежде чем мы углубимся, давайте поймем, что такое推理类型. Представьте, что у вас есть магический друг, который может угадать, о чем вы думаете, просто глядя на вас. Это kinda то, что делает TypeScript с вашим кодом. Он смотрит на ваш код и старается понять, какими должны быть типы ваших переменных, не говоря вам explicitly. Круто, правда?

Теперь давайте рассмотрим различные способы, с помощью которых 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)[]. Это означает, что это массив, который может содержать как строки, так и числа.

Контекстуальное типирование

Контекстуальное типирование occurs, когда TypeScript использует контекст вашего кода для推理 типов. Это особенно полезно с обратными вызовами и параметрами функций. Давайте рассмотрим пример:

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

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

В этом примере TypeScript знает, что forEach для массива чисел передаст число в обратный вызов. Так что он推理, что num это число, и поэтому вы можете использовать toFixed() без ошибок.

Заключение

И вот мы на месте, друзья! Мы совершили путешествие через магический мир推理 типов TypeScript. От простых назначений переменных до сложных возвратов функций и контекстного типирования, TypeScript всегда работает, чтобы понять ваш код и упростить вашу жизнь.

Запомните, что推理 типы - это как иметь умного помощника, который помогает вам писать чище и безошибочно код. Это не идеально, и иногда вам может потребоваться помочь ему с явными типовыми.annotation, но в большинстве случаев он всегда рядом!

Продолжайте практиковаться, продолжайте программировать, и вскоре вы станете магом TypeScript! Счастливого кодирования и да будет types всегда на вашей стороне!

Credits: Image by storyset