Last active
August 8, 2021 07:23
-
-
Save Denkong/dc54d6e33cb6176fbdad522b0f33d497 to your computer and use it in GitHub Desktop.
TypeScript - справочник
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* 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