Skip to content

TypeScript

Sᴛѧʀʟɪɴɢ edited this page Feb 17, 2019 · 1 revision

TypeScript является строго типизированным языком, и каждая переменная и
константа в нем имеет определенный тип. При этом в отличие от javascript
мы не можем динамически изменить ранее указанный тип переменной.

Типы данных и работа с ними

Типы данных:

  • Boolean: логическое значение true или false
  • Number: числовое значение
  • String: строки
  • Array: массивы
  • Tuple: кортежи
  • Enum: перечисления
  • Any: произвольный тип
  • Null и undefined: соответствуют значениям null и undefined в javascript
  • Void: отсутствие конкретного значения (обычно это возвращаемый тип функций)
  • Never: отсутствие значения (обычно это возвращаемый тип функций, которые генерируют
    или возвращают ошибку)

Массивы

Массивы определяются с помощью выражения [] и также являются строго типизированными.
То есть если изначально массив содержит строки, то в будущем он сможет работать только
со строками.

letlist: number[]=[10,20,30];letcolors: string[]=["red","green","blue"];

Кортежи

Кортежи (Tuples) также, как и массивы, представляют набор элементов, для которых
уже заранее известен тип.

let userInfo: [string,number]=["Tom",28];

Перечисления

Тип enum предназначен для описания набора числовых данных с помощью строковых констант.

enumSeason{Winter,Spring,Summer,Autumn};
let current: Season=Season.Summer;

Объекты

Синтаксис такой же, как в JS:

letperson={name: "Tom",age: 23};person={name: "Alice"};

Но из-за строгой типизации на второй строке мы получим ошибку, поскольку компилятор
после первой строки предполагает, что объект person будет иметь два свойства name и age.
Должно быть соответствие по названиям, количеству и типу свойств.

Объединения

Объединения (union) не являются типом данных, но они позволяют определить переменную,
которая может хранить значение двух или более типов:

let id : number | string;
id = "1345dgg5";
id = 234;

Проверка типа

Как и в JS осуществляется с помощью оператора typeof.

constsum: any=123;console.log(typeofsum==="number");

Псевдонимы типов

TypeScript позволяет определять псевдонимы типов с помощью ключевого слова type.

typestringOrNumberType=number|string;
let sum: stringOrNumberType=36.6;

Type assertion

**Type assertion представляет модель преобразования значения переменной к ** определенному типу.

Есть две формы приведения.
Первая форма заключается в использовании угловых скобок:

let someAnyValue: any="hello world!";letstrLength: number=(<string>someAnyValue).length;
let someUnionValue: string | number = "hello work";
strLength = (<string>someUnionValue).length

Вторая форма заключается в применении оператора as:

let someAnyValue: any="hello world!";
let strLength: number=(someAnyValueasstring).length;
let someUnionValue: string|number="hello work";strLength=(someUnionValueasstring).length;

Функции

Поверх того, что предлагает javascript, добавляются типы параметров и тип возвращаемого
значения:

// I способfunctionadd(a: number,b: number): number{returna+b;}// II способletadd=function(a: number,b: number) : number{returna+b;}

В typescript при вызове в функцию должно передаваться ровно столько значений,
сколько в ней определено параметров.

Чтобы иметь возможность передавать различное число значений в функцию,
в TS некоторые параметры можно объявить как необязательные.

Необязательные параметры должны быть помечены вопросительным знаком ?.
Причем необязательные параметры должны идти после обязательных.
Если параметр не передан, то его значение undefined.

functiongetName(firstName: string,lastName?: string){if(lastName){returnfirstName+" "+lastName;}else{returnfirstName;}}

Перегрузка функций

TypeScript поддерживает возможность перегрузки функций.
Мы можем определить несколько версий функции, которые будут иметь одно и то
же имя, но разные типы параметров или разное количество параметров или разные
возвращаемые типы результатов.

Для перегрузки вначале опеределяем все версии функции, которые не будут иметь
никакой логики. А потом определяем версию функции с общей сигнатурой, которая
подходит под все ранее определенные варианты. И в этой общей версии уже
определяем конкретную логику функции.

function add(x: string, y: string): string;
function add(x: number, y: number): number;
function add(x: any, y: any): any {
return x + y;
}
let result1 = add(5, 4); // 9
let result2 = add("5", "4"); // 54

Тип функций

Каждая функция имеет тип, как и обычные переменные.
Тип функции фактически представляет комбинацию типов параметров и типа
возвращаемого значения.

// функция
function sum (x: number, y: number): number {
return x + y;
};
// переменная такого же типа, как эта функция
let op: (x:number, y:number) => number;

Стрелочные функции

Ничего нового:

let sum = (x: number, y: number) => x + y;

Модификаторы доступа

Одной из ключевых концепций ООП является инкапсуляция, подразумевающая
сокрытие от внешнего доступа к состоянию объекта и управление доступом
к этому состоянию. Для этого используются модификаторы доступа.

В TypeScript три модификатора: public, protected и private.

Модификатор по умолчанию - public.

Если к свойствам и методам применяется модификатор private, то к ним нельзя будет
обратиться извне при создании объекта данного класса.

Модификатор protected во многом аналогичен private - свойства и методы с
данным модификатором не видны извне, но к ним можно обратиться из
классов-наследников.

classUser{privatesecret: string;protectedid: string;publicname: string;}

Модификаторы также можно устанавливать в параметрах конструктора.
При таком подходе, свойства создаются сами с нужными модификаторами.

Свойства только для чтения

... https://metanit.com/web/typescript/3.10.php

Clone this wiki locally