9.1 Примитивные типы (Primitive Types)
TypeScript — это строго типизированный язык программирования, который расширяет возможности JavaScript за счет добавления типизации. Сейчас мы пройдемся по основным типам данных в TypeScript, включая примитивные и ссылочные типы.
Примитивные типы — это базовые типы данных, которые представляют одно значение. В TypeScript они включают следующие типы:
1. number
Тип number представляет как целые, так и дробные числа. В TypeScript все числа являются числами с плавающей запятой.
Пример:
let age: number = 30;
let temperature: number = 22.5;
let hex: number = 0xfff; // Шестнадцатеричное число
let binary: number = 0b1010; // Двоичное число
let octal: number = 0o744; // Восьмеричное число
2. string
Тип string представляет строки, то есть последовательности символов. Строки могут быть заключены в одинарные или двойные кавычки, а также в обратные кавычки для шаблонных строк.
Пример:
let firstName: string = 'John';
let lastName: string = "Doe";
let greeting: string = `Hello, my name is ${firstName} ${lastName}`;
3. boolean
Тип boolean представляет логическое значение, которое может быть true или false.
Пример:
let isActive: boolean = true;
let isComplete: boolean = false;
4. null и undefined
Типы null и undefined представляют значения, которые указывают на отсутствие значения.
Пример:
let emptyValue: null = null;
let notAssigned: undefined = undefined;
5. symbol
Тип symbol представляет уникальное и неизменяемое значение, которое может использоваться как идентификатор для свойств объектов. Символы создаются с помощью функции Symbol().
Пример:
let uniqueId: symbol = Symbol('id');
6. bigint
Тип bigint представляет целые числа произвольной точности. bigint создается путем добавления суффикса n к числу или с помощью функции BigInt().
Пример:
let largeNumber: bigint = 1234567890123456789012345678901234567890n;
let anotherBigNumber: bigint = BigInt("1234567890123456789012345678901234567890");
9.2 Объектные типы (Object Types)
Ссылочные типы представляют сложные структуры данных, которые могут содержать несколько значений. В TypeScript они включают следующие типы:
1. object
Тип object представляет не примитивные значения, которые являются коллекцией свойств и методов.
Пример:
let person: object = {
name: 'Alice',
age: 25
};
2. Массивы (Array)
Массивы представляют собой коллекции элементов одного типа. В TypeScript можно использовать два синтаксиса для объявления массивов: с использованием квадратных скобок или с использованием типа Array<T>.
Пример:
let numbers: number[] = [1, 2, 3, 4, 5];
let strings: Array<string> = ['one', 'two', 'three'];
3. Кортежи (Tuple)
Кортежи представляют собой массивы фиксированной длины с элементами различных типов. Это полезно, когда вам нужно хранить коллекцию значений с фиксированным порядком и типами.
Пример:
let tuple: [string, number, boolean] = ['hello', 42, true];
4. Функции (Function)
Функции в TypeScript можно объявить с указанием типов параметров и возвращаемого значения. Это помогает обеспечить правильное использование функций.
Пример:
function add(a: number, b: number): number {
return a + b;
}
let result: number = add(5, 10);
5. Интерфейсы (Interface)
Интерфейсы позволяют определять структуру объектов, указывая, какие свойства и методы они должны иметь. Интерфейсы не компилируются в JavaScript, но используются для проверки типов.
Пример:
interface User {
name: string;
age: number;
isAdmin?: boolean; // Опциональное свойство
}
let user: User = {
name: 'John',
age: 30,
isAdmin: true
};
6. Классы (Class)
Классы используются для создания объектов с определенными свойствами и методами. TypeScript расширяет возможности классов, добавляя модификаторы доступа, абстрактные классы и интерфейсы.
Пример:
class Person {
private name: string;
public age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
public getName(): string {
return this.name;
}
}
let person = new Person('Alice', 25);
console.log(person.getName());
7. Enums (Перечисления)
Перечисления позволяют определять набор именованных значений. Это полезно для создания групп связанных констант.
Пример:
enum Color {
Red,
Green,
Blue
}
let color: Color = Color.Green;
8. Union и Intersection Types
Union (объединенные) типы позволяют переменной быть одним из нескольких типов. Intersection (пересечение) типов позволяет объединять несколько типов в один.
Пример (Union):
let value: string | number;
value = 'Hello';
value = 42;
Пример (Intersection):
interface HasName {
name: string;
}
interface HasAge {
age: number;
}
// Объединяем интерфейсы HasName и HasAge в тип Person
type Person = HasName & HasAge;
// Создаем объект person, соответствующий типу Person
let person: Person = {
name: 'John', // (поле ' name ' из интерфейса HasName)
age: 30 // (поле ' age ' из интерфейса HasAge)
};
9.3 Специальные типы (Special Types)
1. Any
Тип any позволяет отключить проверку типов для переменной. Это может быть полезно при миграции кода с JavaScript на TypeScript или при работе с динамическими данными.
Пример:
let dynamicValue: any = 'Hello';
dynamicValue = 42; // Нет ошибки компиляции
dynamicValue = true; // Нет ошибки компиляции
2. Unknown
Тип unknown похож на any, но с более строгими правилами. Вы не можете использовать значения типа unknown без предварительной проверки их типа.
Пример:
let unknownValue: unknown = 'Hello';
if (typeof unknownValue === 'string') {
console.log(unknownValue.toUpperCase()); // Нет ошибки компиляции
}
3. Void
Тип void используется для функций, которые не возвращают значение.
Пример:
function logMessage(message: string): void {
console.log(message);
}
4. Never
Тип never представляет значение, которое никогда не должно существовать. Он используется для функций, которые никогда не возвращают значение (например, бросают исключения) или для обозначения невозможных типов.
Пример:
function throwError(message: string): never {
throw new Error(message);
}
Запустите Cypress:
npm test
Создайте тест в cypress/integration/example.spec.ts:
describe('My First Test', () => {
it('Visits the Kitchen Sink', () => {
cy.visit('https://example.cypress.io');
cy.contains('type').click();
cy.url().should('include', '/commands/actions');
cy.get('.action-email')
.type('fake@email.com')
.should('have.value', 'fake@email.com');
});
});
Cypress предоставляет мощные возможности для автоматизированного тестирования пользовательского интерфейса.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ