TypeScript — это мощная расширенная версия JavaScript, которая добавляет в язык возможности статической типизации. Одной из ключевых особенностей TypeScript является его способность выполнять проверку типов, которая гарантирует, что переменным присвоены правильные типы, и помогает выявить потенциальные ошибки на ранних этапах процесса разработки. В этой статье мы рассмотрим различные методы проверки типа переменной в TypeScript, а также приведем примеры кода для каждого подхода.
Метод 1. Использование оператора typeof
Оператор typeof позволяет определить тип переменной во время выполнения. Он возвращает строку, представляющую тип переменной. Вот пример:
const value = 42;
console.log(typeof value); // Output: "number"
Метод 2: использование оператора экземпляра
Оператор instanceof проверяет, является ли объект экземпляром определенного класса или функции-конструктора. Он возвращает логическое значение, указывающее, относится ли объект к указанному типу. Вот пример:
class MyClass {}
const obj = new MyClass();
console.log(obj instanceof MyClass); // Output: true
Метод 3. Использование защиты типа
Защитники типа — это условные операторы, которые сужают тип переменной в блоке кода. Они часто используются в сочетании с операторами typeof или instanceof. Вот пример:
function doSomething(value: number | string) {
if (typeof value === 'number') {
// value is treated as a number here
console.log(value.toFixed(2));
} else {
// value is treated as a string here
console.log(value.toUpperCase());
}
}
Метод 4. Использование предикатов типов
Предикаты типа — это пользовательские функции, определяющие тип переменной. Они создаются с использованием ключевого слова is, за которым следует аннотация типа. Вот пример:
function isString(value: unknown): value is string {
return typeof value === 'string';
}
function processValue(value: unknown) {
if (isString(value)) {
// value is treated as a string here
console.log(value.toUpperCase());
} else {
console.log('Invalid value');
}
}
Метод 5. Использование распознаваемых объединений
Дискриминированные объединения, также известные как теговые объединения или алгебраические типы данных, — это функция TypeScript, позволяющая создавать типы с общим свойством дискриминатора. Это свойство можно использовать для определения конкретного подтипа внутри объединения. Вот пример:
interface Square {
kind: 'square';
size: number;
}
interface Circle {
kind: 'circle';
radius: number;
}
type Shape = Square | Circle;
function calculateArea(shape: Shape) {
if (shape.kind === 'square') {
// shape is treated as a Square here
return shape.size 2;
} else {
// shape is treated as a Circle here
return Math.PI * shape.radius 2;
}
}
Метод 6. Использование утверждений типа
Утверждения типа, также известные как приведения типов, позволяют вручную переопределить вывод типа TypeScript и указать тип переменной. Они обозначаются ключевым словом as или синтаксисом угловых скобок. Вот пример:
const value: unknown = 'Hello, TypeScript!';
const length = (value as string).length;
console.log(length); // Output: 20
В этой статье мы рассмотрели несколько методов проверки типа переменной в TypeScript. Мы рассмотрели использование операторов typeof и instanceof, средств защиты типов, предикатов типов, распознаваемых объединений и утверждений типов. Освоив эти методы, вы получите прочную основу для эффективной работы с системой типов TypeScript и обеспечения корректности вашего кода.