Skip to content

Instantly share code, notes, and snippets.

@Denkong
Last active August 8, 2021 07:23
Show Gist options
  • Save Denkong/dc54d6e33cb6176fbdad522b0f33d497 to your computer and use it in GitHub Desktop.
Save Denkong/dc54d6e33cb6176fbdad522b0f33d497 to your computer and use it in GitHub Desktop.
TypeScript - справочник
/**
* tsconfig.json - конфигурация компиляторя ts
* tsc -w - выполняет и следит за изменениями
{
"compilerOptions": { - настройка параметров компиляции
"target": "es5", - какой стандарт JavaScript будет применяться при компиляции
"removeComments": true, -Удаляет коментарии
"outDir": "js", -задает каталог для скомпилированных файлов
"sourceMap": false, -надо сгенерировать карту для сопоставления исходных и скомпилированных файлов
"outFile": "main.js" -название выходного файла
},
"files":[ -можно установить набор включаемых в проект файлов
"app.ts",
],
"exclude":[ -позволяет исключить при компиляции определенные файлы
При компиляции компилятор не будет учитывать файлы TypeScript, которые находятся в каталогах из секции exclude.
"wwwroot",
"node_modules"
],
"compileOnSave": true, -Параметр compileOnSave при значении true указывает используемой IDE сгенерировать все файлы js при каждом сохранении файлов TypeScript:
}
*
**/
/**
* ПЕРЕМЕННЫЕ
*
var z = "hello";
let x = "hello";
const y = "hello"
*/
/**
* ТИПЫ ДАННЫХ
*
Boolean: логическое значение true или false
let isEnabled = true;
let isAlive: boolean = false;
Number: числовое значение
let decimal: number = 6;
let decimal: number = 6.34;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;
String: строки
let firstName: string = "Tom";
let lastName = 'Johns';
Array: массивы
let list: number[] = [10, 20, 30];
let colors: string[] = ["red", "green", "blue"];
let names: Array<string> = ["Tom", "Bob", "Alice"];
Tuple: кортежи
let userInfo: [string, number]=["Tom", 28];
Enum: перечисления
enum Season { Winter, Spring, Summer, Autumn };
let current: Season = Season.Summer;
console.log(current); //2
current = Season.Autumn
console.log(current); //3
let current1: string = Season[2];
console.log(current1); //Summer
Any: произвольный тип
Any описывает данные, тип которых может быть неизвестен на момент написания приложения
var someArray: any[] = [ 24, "Tom", false];
Null и undefined: соответствуют значениям null и undefined в javascript
Void: отсутствие конкретного значения, используется в основном в качестве возвращаемого типа функций
Never: также представляет отсутствие значения и используется в качестве возвращаемого типа функций, которые генерируют
Комплексные объекты
let person = {name:"Tom", age:23};
console.log(person.name);
console.log(person["name"]);
*/
/**
* РАБОТА С ТИПАМИ ДАННЫХ
*
* Объединения
*
let id : number | string;
id = "1345dgg5";
id = 234;
*
* Проверка типа typeof
*
let sum: any;
sum = 1200;
sum = "тысяча двести";
if (typeof sum === "number") {
let result: number = sum / 12;
console.log(result);
}
else{
console.log("invalid operation");
}
*
* Псевдонимы типов
*
type stringOrNumberType = number | string;
let sum: stringOrNumberType = 36.6;
if (typeof sum === "number") {
console.log(sum / 6);
}
*
* Type assertion - преобразование типов
*
let someAnyValue: any = "hello world!";
let strLength: number = (someAnyValue as string).length;
let someAnyValue: any = "hello world!";
let strLength: number = (<string>someAnyValue).length;
*/
/**
* ФУНКЦИИ
*
* Определение функции
*
function add(a: number, b: number): number {
return a + b;
}
let add = function (a: number, b: number) : number {
return a + b;
}
let result1 = add(1, 2);
*
* Необязательные параметры
*
function getName(firstName: string, lastName?: string) {
if (lastName)
return firstName + " " + lastName;
else
return firstName;
}
*
* Параметры по умолчанию
*
function getName(firstName: string, lastName: string="Иванов") {
return firstName + " " + lastName;
}
function defaultSurname(): string{
return "Smith";
}
function getName(firstName: string, lastName: string=defaultSurname()) {
return firstName + " " + lastName;
}
*
* Неопределенный набор параметров
*
function addNumbers(...numberArray: number[]): number {
let result:number = 0
for (let i = 0; i < numberArray.length; i++) {
result+= numberArray[i];
}
return result;
}
*
* Перезагрузка функции - несколько версий функци
*
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 operationFunc: (x: number, y: number) => number = function (a: number, b: number): number {
return a + b;
};
function sum (x: number, y: number): number {
return x + y;
};
function subtract (a: number, b: number): number {
return a - b;
};
let op: (x:number, y:number) => number;
op = sum;
op = subtract;
*
* Функция обратного вызова
*
function mathOp(x: number, y: number, operation: (a: number, b: number) => number): number{
let result = operation(x, y);
return result;
}
let operationFunc: (x: number, y: number) => number = function (a: number, b: number): number {
return a + b;
};
console.log(mathOp(10, 20, operationFunc)); //30
operationFunc = function (a: number, b: number): number {
return a * b;
}
console.log(mathOp(10, 20, operationFunc)); // 200
*
* Стрелочные функции
*
let sum = (x: number, y: number) => x + y;
let result = sum(15, 35);
*/
/**
* Объектно-ориентированное программирование
* Классы
class User {
id: number;
name: string;
constructor(userId: number, userName: string) {
this.id = userId;
this.name = userName;
}
getInfo(): string {
return "id:" + this.id + " name:" + this.name;
}
static PI: number = 3.14;
static getSquare(radius: number): number {
return User.PI * radius * radius;
}
}
let tom: User = new User(1,'tom');
console.log(tom.getInfo());
console.log(User.getSquare(30));
console.log(User.PI);
*
* Модификаторы доступа
public
protected - свойства и методы с данным модификатором не видны из вне, но к ним можно обратиться из классов-наследнико
private - нельзя будет обратиться извне при создании объекта данного класса.
*
* Методы доступа SET / GET срабатывают при установке и вызове значений
*
class User {
private _name: string;
public get name(): string {
return this._name;
}
public set name(n: string) {
this._name = n;
}
}
let tom = new User();
tom.name = "Tom"; // срабатывает set-метод
console.log(tom.name);
*
* Наследование. Абстрактные классы class [] extends []
*
class User {
name: string;
constructor(userName: string) {
this.name = userName;
}
getInfo(): void {
console.log("Имя: " + this.name);
}
}
class Employee extends User {
company: string;
constructor(userName: string, empCompany: string) {
super(userName); //Вызов конструктора базового класса
this.company = empCompany;
}
work(): void {
console.log(this.name + " работает в компании " + this.company);
}
}
let bill: Employee = new Employee("Bill", "Apple");
bill.work();
*
* Переопределение методов
*
class User {
name: string;
constructor(userName: string) {
this.name = userName;
}
getInfo(): void {
console.log("Имя: " + this.name);
}
}
class Employee extends User {
company: string;
constructor(userName: string, empCompany: string) {
super(userName);
this.company = empCompany;
}
getInfo(): void {
super.getInfo()
console.log("Работает в компании: " + this.company);
}
}
let bill: Employee = new Employee("Bill", "Apple");
bill.getInfo();
*
* Абстрактные классы abstract
* не можем создать напрямую объект абстрактного класса, используя его конструктор
* abstract метобы и свойства должны быть реализованы
*
abstract class Figure {
abstract getArea(): void;
}
class Rectangle extends Figure{
constructor(public width: number, public height: number){
super();
}
}
*
* Интерфейсы
* Интерфейс определяет свойства и методы, которые объект должен реализовать
* :interface
* class [] implements IUser для классов
*
interface IUser {
id: number;
name: string;
age?: number;
readonly x: number; //только для чтения
getFullName(surname: string): string;
}
//Интерфейсы могут наследоваться
interface ICar extends IMovable {
fill(): void;
}
//Интерфейс массивов
interface StringArray {
[index: number]: string;
}
let phones: StringArray = ["iPhone 7", "HTC 10", "HP Elite x3"];
//Интерфейс функции
interface PersonInfo {
(name: string, surname: string):void;
}
let employee: IUser = {
id: 1,
name: "Tom"
}
function buildUser(userId: number, userName: string): IUser {
    return { id: userId, name: userName };
}
class User implements IUser{
id: number;
name: string;
age: number;
constructor(userId: number, userName: string, userAge: number) {
this.id = userId;
this.name = userName;
this.age = userAge;
}
getFullName(surname: string): string {
return this.name + " " + surname;
}
}
*
* instanceOf можно проверить, принадлежит ли объект определенному клас
*
let alice: Employee = new Employee("Microsoft", "Alice");
if (alice instanceof User) {
console.log("Alice is a User");
}
else {
console.log("Alice is not a User");
}
*
* Обобщения <T>
*
function getId<T>(id: T): T {
return id;
}
let result1 = getId<number>(5);
console.log(result1);
let result2 = getId<string>("abc");
console.log(result2);
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment