TypeScript - Type Inference: A Beginner's Guide
Здравствуйте, будущий суперзвезда программирования! Сегодня мы отправимся в увлекательное путешествие в мир TypeScript и рассмотрим одну из его coolest функций:推理类型 (Type Inference). Не волнуйтесь, если вы новички в программировании; я буду вашим доброжелательным проводником, и мы будем двигаться шаг за шагом. К концу этого руководства вы будете удивлены, насколько умным может быть TypeScript!
Что такое推理类型?
Прежде чем мы углубимся, давайте поймем, что такое推理类型. Представьте, что у вас есть магический друг, который может угадать, о чем вы думаете, просто глядя на вас. Это 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