Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 10 additions & 2 deletions src/task_1/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,16 @@
* который написан в функции logObj компилировался и исполнялся корректно
*/

type FooType = unknown;
type BarType = unknown;
type FooType = {
stringProp: string;
numberProp: number;
barObject: BarType;
};
type BarType = {
stringsArrayProp: string[];
numbersOrDatesArrayProp: Array<number | Date>;
functionProp: (flag: boolean) => void;
};

export const fooObjects: FooType[] = [
{
Expand Down
7 changes: 7 additions & 0 deletions src/task_2/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,13 @@ const obj7: ThirdType = {
const array = [obj1, obj2, obj3, obj4, obj5, obj6, obj7];

function filter(array: Array<FirstType | SecondType | ThirdType>, type: string) {
let result: any[] = [];
array.forEach(obj =>{
if (typeof obj === type){
result.push(obj);
}
});
return result;
}

filter(array, 'FirstType');
Expand Down
7 changes: 7 additions & 0 deletions src/task_3/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,13 @@
*/
function add(x: string, y: string): string;
function add(x: number, y: number): number;
function add(x: number | string, y: number | string): number | string{
if (typeof x === 'number' && typeof y === 'number'){
return x + y;
} else {
return <string>x + <string>y;
}
}

add('20', '21'); //2021
add(20, 21); //41
34 changes: 34 additions & 0 deletions src/task_4/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,37 @@ type FooType = {
a: number
b: string
};

/*Следует понимать, что interface - инструмент создания сущностей в контексте ООП.
Интерфейс это определенный контракт, который обязуется испольнять объект/ класс,
реализующий этот интерфейс.
*/

class ClsFromInterface implements IFoo{
a: 12;
b: '12';
}

let objFromInterface: IFoo = {
a: 12,
b: '12',
}

//Класс может реализовывать интерфейс, но класс не может "реализовать type",
//type можно только объявлять.
//Не получится сделать что-то подобное: class Tmp: FooType;

//Однако, тип подобно интерфейсу требует объявлять все поля, присущие данному типу.

let objFromType: FooType = {
a: 12,
b: '12'
}

//Пожалуй главное отличие - возможность наследовать интерфейсы.

interface IFoo1 extends IFoo{
//далее перечисляем собственные поля интерфейса IFoo1.
prop1: string;
prop2: number;
}
2 changes: 1 addition & 1 deletion src/task_5/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ export function logPerson(person: Person) {
console.log(` - ${person.name}, ${person.age}, ${additionalInformation}`);
}

export function filterUsers(persons: Person[], criteria: User): User[] {
export function filterUsers(persons: Person[], criteria: {type?: string; name?: string; age?: number; occupation?: string;}): User[] {
return persons.filter(isUser).filter((user) => {
const criteriaKeys = Object.keys(criteria);
return criteriaKeys.every((fieldName) => {
Expand Down