Основы TypeScript
Эта статья объясняет основы TypeScript.
YouTube Video
Выполнение "Hello World!"
Сначала мы запустим классический пример "Hello World!" на TypeScript с использованием Visual Studio Code.
npm install -g typescriptУстановите typescript с помощью команды npm.
Создайте файл tsconfig.json.
1{
2 "compilerOptions": {
3 "target": "ES6",
4 "module": "CommonJS",
5 "outDir": "out",
6 "sourceMap": true
7 }
8}Создайте файл .vscode/launch.json, чтобы включить запуск файла main.ts в Visual Studio Code.
1{
2 "version": "0.2.0",
3 "configurations": [
4 {
5 "type": "node",
6 "request": "launch",
7 "name": "Launch Program",
8 "skipFiles": [
9 "<node_internals>/**"
10 ],
11 "program": "${workspaceFolder}/main.ts",
12 "preLaunchTask": "tsc: build - tsconfig.json",
13 "outFiles": [
14 "${workspaceFolder}/out/main.js"
15 ]
16 }
17 ]
18}Создайте файл main.ts, который отображает "Hello World!". Вы можете запустить его в Visual Studio Code, нажав клавишу F5.
1console.log("Hello World!");Настроив таким образом, вы можете выполнять файлы TypeScript в VSCode.
Обзор TypeScript
TypeScript (TS) — это надмножество JavaScript, разработанное компанией Microsoft. TypeScript поддерживает статическую типизацию, что позволяет писать более надёжный и поддерживаемый код.
Статическая типизация
- TypeScript добавляет типы в JavaScript и выполняет проверку типов во время компиляции. Это позволяет предотвращать ошибки, связанные с типами, заранее.
1let message: string = "Hello, TypeScript";
2console.log(message);Компиляция
- Поскольку TypeScript нельзя напрямую выполнить в браузере, его необходимо транспилировать (компилировать) в JavaScript. Используйте
tsc(TypeScript Compiler) для преобразования файлов TS в файлы JS.
Необязательные аннотирования типов
- TypeScript также выполняет вывод типов, но позволяет явно указывать типы, когда это необходимо. Это улучшает читаемость и надёжность кода.
1function greet(name: string): string {
2 return `Hello, ${name}`;
3}
4console.log(greet('John'));Интерфейсы
- TypeScript предоставляет
interfaceдля определения структуры объектов. Это позволяет строго управлять структурой объектов.
1interface Person {
2 name: string;
3 age: number;
4}
5const user: Person = { name: "John", age: 30 };
6console.log(user.name);Классы
- TypeScript предоставляет расширения синтаксиса классов JavaScript и поддерживает наследование, модификаторы доступа (
public,private,protected) и абстрактные классы.
1class Animal {
2 protected name: string;
3 constructor(name: string) {
4 this.name = name;
5 }
6 speak(): void {
7 console.log(`${this.name} makes a sound.`);
8 }
9}
10
11class Dog extends Animal {
12 speak(): void {
13 console.log(`${this.name} barks.`);
14 }
15}
16const animal = new Animal('Generic Animal');
17animal.speak();
18
19const dog = new Dog('Buddy');
20dog.speak();Обобщения
- В TypeScript можно писать повторно используемый и типобезопасный код, используя обобщения.
1function identity<T>(arg: T): T {
2 return arg;
3}
4console.log(identity<string>("Hello Generics"));Экосистема
- TypeScript полностью совместим с экосистемой JavaScript и может использовать существующий код JavaScript в неизменном виде. Кроме того, он интегрирован с популярными библиотеками, такими как React и Node.js.
Мощные инструменты для разработчиков
- TypeScript предлагает расширенные функции, такие как автозаполнение, поддержка рефакторинга и проверка ошибок в редакторах, таких как VSCode.
TypeScript особенно полезен для повышения надежности и улучшения продуктивности разработчиков в крупных проектах.
Переменные в TypeScript
Здесь объясняются основные концепции и использование переменных в TypeScript.
Объявление переменных
В TypeScript переменные объявляются с использованием трех ключевых слов: let, const и var. Каждое ключевое слово имеет различные характеристики.
Пример let:
let имеет блочную область видимости (действителен только внутри фигурных скобок {}). Значения могут быть переназначены позднее.
1let count: number = 10;
2console.log(count); // Outputs: 10
3
4count = 20;
5console.log(count); // Outputs: 20
Пример const:
const нельзя переопределить, поэтому однажды присвоенное значение не может быть изменено. Однако содержимое объектов и массивов может быть изменено.
1const pi: number = 3.14;
2console.log(pi); // Outputs: 3.14
3
4// pi = 3.14159; // Error: Reassignment is not allowed
5
6const fruits: string[] = ["apple", "banana"];
7fruits.push("orange");
8console.log(fruits); // Outputs: ["apple", "banana", "orange"]
Пример var:
var имеет функциональную область видимости и может быть переназначен. Однако игнорируя блочную область видимости, это может вызвать непредсказуемое поведение по сравнению с let или const.
1var message: string = "Hello, world!";
2console.log(message); // Outputs: Hello, world!
3
4message = "Hello, TypeScript!";
5console.log(message); // Outputs: Hello, TypeScript!
6
7// (`var` ignores block scope)
8if (true) {
9 var localMessage = "Hello again!";
10}
11console.log(localMessage); // "Hello again!"
Аннотации типов
В TypeScript вы можете явно аннотировать типы для переменных. TypeScript также поддерживает вывод типов, но аннотации типов полезны в сложных сценариях.
1let isDone: boolean = false;
2console.log(isDone); // Outputs: false
3
4let userName: string = "Alice";
5console.log(userName); // Outputs: Alice
Неинициализированные переменные
Если переменная объявлена без инициализации, по умолчанию ей присваивается значение undefined. Переменной, объявленной с использованием let, необходимо явно присвоить значение undefined или включить undefined в ее тип, если она не инициализирована.
1let uninitialized: number | undefined;
2console.log(uninitialized); // Outputs: undefined
3
4uninitialized = 5;
5console.log(uninitialized); // Outputs: 5
Область видимости переменной
let и const имеют блочную область видимости, поэтому они действительны только в рамках одного блока.
1if (true) {
2 let blockScoped: string = "Block Scoped";
3 console.log(blockScoped); // Outputs: Block Scoped
4}
5// console.log(blockScoped); // Error: blockScoped is out of scope
Всплытие переменных
Поскольку TypeScript является надмножеством JavaScript, он наследует механизм всплытия JavaScript. Всплытие относится к поведению, при котором объявления переменных и функций рассматриваются как поднятые к началу их области видимости. Однако поднимается только объявление, а инициализация остается на месте. Переменные, объявленные с помощью var, всплывают, но использование let или const до их объявления приводит к ошибке.
1console.log(a); // undefined
2var a = 10;
3console.log(a); // 10
- В этом случае переменные, объявленные с помощью
var, всплывают, и их значения выводятся.
1console.log(b); // ReferenceError
2let b = 20;- Переменные, объявленные с помощью
let, не всплывают, что приводит к ошибке.
Резюме
Ниже приведено краткое описание let, const и var.
letможно переопределять, и он имеет блочную область видимости.constнельзя переопределять, и он имеет блочную область видимости.varможно переопределять, и он имеет функциональную область видимости.- Все они позволяют использовать явные аннотации типов для задания типов переменных.
Экранирующие символы в TypeScript
Экранирующие символы используются, когда определённые символы невозможно ввести напрямую или чтобы представить символы, имеющие специальное значение в строке. В TypeScript экранирующие символы используются для представления управляющих или специальных символов.
Например, используйте \n, чтобы вывести сообщение, включающее перенос строки.
1const message: string = "Hello,\nWorld!";
2console.log(message);
3// Output:
4// Hello,
5// World!
Экранирование специальных символов
Экранирующие символы также полезны при включении специальных символов в строку. Например, вы можете захотеть использовать двойные или одинарные кавычки непосредственно в строке.
1const singleQuoteExample: string = 'It\'s a beautiful day!';
2console.log(singleQuoteExample);
3// Output: It's a beautiful day!
4
5const doubleQuoteExample: string = "He said, \"Welcome!\"";
6console.log(doubleQuoteExample);
7// Output: He said, "Welcome!"
Экранирование обратной косой черты
Чтобы включить обратную косую черту в строку, её нужно написать как двойную обратную косую черту.
1const path: string = "C:\\Program Files\\MyApp";
2console.log(path);
3// Output: C:\Program Files\MyApp
Юникод и шестнадцатеричные экранирования
В TypeScript кодовые точки Unicode могут быть представлены с использованием экранирующих последовательностей.
Экранирование символов в Unicode
Вы можете представить символы Unicode, указав четырёхзначный шестнадцатеричный номер после \u.
1const smileyFace: string = "\u263A";
2console.log(smileyFace);
3// Output: ☺ (Copyright Mark)
Шестнадцатеричное экранирование
Вы можете представить определённые символы, используя двухзначный шестнадцатеричный номер после \x.
1const letterA: string = "\x41";
2console.log(letterA);
3// Output: A
Шаблонные строки и экранирование
Шаблонные литералы определяются с использованием обратных кавычек и обеспечивают удобный способ создания встроенных выражений или многострочных строк. Обычные экранирующие символы могут использоваться непосредственно в шаблонных строках.
1const multiLine: string = `This is
2a multi-line
3string.`;
4console.log(multiLine);
5// Output:
6// This is
7// a multi-line
8// string.
Особые случаи
В TypeScript использование недопустимых экранирующих последовательностей внутри строки может привести к синтаксической ошибке. Поэтому важно проверять, являются ли экранирующие символы допустимыми.
1// Invalid escape sequence
2const invalidString: string = "\xZZ"; // Error
Примеры практического использования
Вот пример создания сложной строки с использованием экранирующих символов.
1const jsonExample: string = "{\n\t\"name\": \"John Doe\",\n\t\"age\": 30\n}";
2console.log(jsonExample);
3// Output:
4// {
5// "name": "John Doe",
6// "age": 30
7// }
В этом примере \n используется для нового строки, а \t — для добавления отступа. Это делает структуру JSON более удобочитаемой.
Резюме
Экранированные символы играют очень важную роль при работе со строками в TypeScript. Когда вы хотите включить специальные символы или управляющие символы в строку, вы можете создавать выразительные строки, используя подходящие последовательности экранирования. Понимание и правильное использование экранированных символов может улучшить читабельность и поддержку кода.
Версии TypeScript
Давайте рассмотрим обзор версий TypeScript.
-
TypeScript 1.0 (2014)
Первая стабильная версия TypeScript. Были внедрены базовые возможности, такие как типизация, классы и модули.
-
TypeScript 2.0 (2016)
Были введены
Non-nullable Types,Control Flow Analysis,Read-only Propertiesи типNever, что улучшило вывод типов. -
TypeScript 3.0 (2018)
Была представлена более гибкая система типов, включая такие функции, как
Project References, расширения дляTuple Typesи улучшенияRest Parameters. -
TypeScript 4.0 (2020)
Были добавлены функции, такие как
Variadic Tuple Types, улучшения редактора, улучшенный вывод типов иLabelled Tuple Elements, чтобы улучшить опыт разработки. -
TypeScript 4.1 (2020)
Были добавлены
Template Literal Types, что сделало манипуляции с типами строк более мощными. -
TypeScript 4.3 (2021)
Добавление ключевого слова
Override, улучшения модификаторов доступа в конструкторах и улучшенная поддержка типов дляWeakMapиWeakSet. -
TypeScript 4.5 (2021)
Добавлены тип
Awaited,ModuleSuffixesи улучшена совместимость с модулями ECMAScript. -
TypeScript 5.0 (2023)
Проведена стандартизация
Decorators, улучшена скорость сборки проектов, усовершенствована система типов и добавлена поддержка последних функций ECMAScript.
TypeScript постоянно развивается, каждый год выпускаются несколько версий, добавляющих новые функции и улучшения.
Вы можете следовать этой статье, используя Visual Studio Code на нашем YouTube-канале. Пожалуйста, также посмотрите наш YouTube-канал.