138 lines
3.7 KiB
TypeScript
138 lines
3.7 KiB
TypeScript
|
||
// ########################## УЧЕБНЫЙ ТЕКСТ ############################################################
|
||
//******************************************************************************************************
|
||
|
||
interface People {
|
||
name: string;
|
||
age: number | undefined;
|
||
}
|
||
|
||
let people01: People = {
|
||
name: "Kostya",
|
||
age: undefined
|
||
};
|
||
|
||
let people02: People = {
|
||
name: "Yura",
|
||
age: 32
|
||
}
|
||
|
||
people01.age = 60;
|
||
// console.log(people01);
|
||
// console.log(JSON.stringify(people01));
|
||
// console.log(people01.age);
|
||
console.log(`${people01.name} имеет возраст ${people01?.age ?? '40'}`); //Kostya --- 60
|
||
console.log(`${people02.name} имеет возраст ${people02?.age ?? '40'}`); //Yura --- 32
|
||
console.log(`${people01.name} имеет возраст ${people02?.age ?? '40'}`);
|
||
|
||
interface PeopleLocation extends People {
|
||
location: string;
|
||
}
|
||
|
||
let peopleLocation01: PeopleLocation = {
|
||
name: "djdf",
|
||
age: 42342,
|
||
location: "dafdf"
|
||
}
|
||
class ProcessingPeoples implements PeopleLocation {
|
||
name: string;
|
||
age: number | undefined;
|
||
location: string = '';
|
||
|
||
constructor(name: string){
|
||
this.name = name;
|
||
}
|
||
}
|
||
|
||
let str: string = 'test text';
|
||
let proc1 = new ProcessingPeoples(str)
|
||
console.log(proc1)
|
||
proc1.name = 'new test'
|
||
console.log(proc1)
|
||
|
||
class ProcessingPeoplesExt extends ProcessingPeoples {
|
||
isActive: boolean = false;
|
||
|
||
constructor(name: string, isActive: boolean){
|
||
super(name);
|
||
if(isActive) {
|
||
this.location = 'Gorkyi street';
|
||
}
|
||
else{
|
||
this.location = '';
|
||
}
|
||
}
|
||
}
|
||
|
||
let a: ProcessingPeoples = new ProcessingPeoplesExt("Vasya", true);
|
||
|
||
class Duck {
|
||
type: string = 'Duck';
|
||
weight: number = 0;
|
||
log(){
|
||
console.log("I'm simple duck");
|
||
}
|
||
}
|
||
|
||
let Utka: Duck = new Duck();
|
||
Utka.log();
|
||
|
||
interface Eateable {
|
||
eat(): void; //пустота, функция ничего не принимает и не возвращает.
|
||
}
|
||
|
||
class GreyDuck extends Duck implements Eateable{ //наследоваться можно от другого класса только один раз, но!! реализация интерфейсов может быть не ограниченно количество раз
|
||
constructor() {
|
||
super(); // в данном примере, если используется конструктор и при этом этот конструктор наслеедуется от родителя, то мы обязаны вызывать конструктор родителя.
|
||
this.type = 'GreyDuck'
|
||
}
|
||
override log(){
|
||
console.log("I'm grey duck");
|
||
}
|
||
|
||
eat(){
|
||
console.log("I'm eat");
|
||
}
|
||
}
|
||
|
||
class RedDuck extends Duck implements Eateable {
|
||
constructor() {
|
||
super();
|
||
this.type = 'RedDuck'
|
||
console.log(`Object created ${this.type}`)
|
||
}
|
||
eat(): void {
|
||
console.log("I'm eat");
|
||
}
|
||
override log(){
|
||
console.log("I'm red duck");
|
||
}
|
||
}
|
||
|
||
let duck1 = new RedDuck();
|
||
let duck2 = new GreyDuck();
|
||
|
||
let array: Eateable[] = [
|
||
duck1,
|
||
duck2
|
||
];
|
||
|
||
let result = array[0]; //мы можем проверить содержание массива с именем array. в квадратных скобках мы указали ноль = это первый эелемент массива.
|
||
console.log(`результат содержимого массива${JSON.stringify(result)}`); //вывод на экран
|
||
|
||
for (let item of array) {
|
||
item.eat();
|
||
}
|
||
|
||
let array2: Duck[] = [
|
||
duck2,
|
||
duck1
|
||
];
|
||
|
||
for (let item of array2) {
|
||
item.log();
|
||
}
|
||
|
||
array2.filter(item => "eat" in item); //тестирование не относится к тексту выше
|
||
|