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
35 changes: 31 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
},
"homepage": "https://github.com/RTF-Angular-2021/ts-task-1#readme",
"dependencies": {
"tsc": "^1.20150623.0"
},
"devDependencies": {}
"tsc": "^1.20150623.0",
"typescript": "^5.4.5"
}
}
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: Array<string>,
numbersOrDatesArrayProp: Array<Date | number>,
functionProp(flag: boolean): void
};

export const fooObjects: FooType[] = [
{
Expand Down
52 changes: 38 additions & 14 deletions src/task_2/index.ts
Original file line number Diff line number Diff line change
@@ -1,30 +1,30 @@
/** Задача 2
* Требуется реализовать функцию filter, которая будет
* принимать generic параметр - тип данных
* аргумент - массив с объектами каких-то типов
* возврщать массив с объектами, которые имеют тип, указанный в generic параметре
* Требуется реализовать функцию filter, которая будет принимать
* массив с объектами 3х типов
* наименование типа
* возврщать массив с объектами, которые имеют тип, указанный во втором аргументе
*/

enum System {
Linux = 0,
Window = 1,
MacOS = 2
MacOS = 2,
}

type FirstType = {
prop1: string,
prop2: boolean
prop2: boolean,
}

type SecondType = {
prop1: typeof undefined,
prop2: () => Date
prop2: () => Date,
}

type ThirdType = {
prop1: string,
prop2: boolean
prop3: System
prop2: boolean,
prop3: System,
}

const obj1: FirstType = {
Expand Down Expand Up @@ -70,10 +70,34 @@ const obj7: ThirdType = {

const array = [obj1, obj2, obj3, obj4, obj5, obj6, obj7];

function filter<T>(anyObjectArray: Array<FirstType | SecondType | ThirdType>) {

function filter(array: Array<FirstType | SecondType | ThirdType>, type: string) {
let result: any[] = [];
switch(type){
case "FirstType":
array.forEach(item =>{
if(typeof item.prop1 == 'string' && typeof item.prop2 == 'boolean' && !("prop3" in item)){
result.push(item);
}
});
break;
case 'SecondType':
array.forEach(item =>{
if(typeof item.prop1 == 'undefined' && typeof item.prop2 == 'function'){
result.push(item);
}
});
break;
case 'ThirdType':
array.forEach(item =>{
if(typeof item.prop1 == 'string' && typeof item.prop2 == 'boolean' && "prop3" in item){
result.push(item);
}
});
break;
}
return result;
}

filter<FirstType>(array);
filter<SecondType>(array);
filter<ThirdType>(array);
filter(array, 'FirstType');
filter(array, 'SecondType');
filter(array, 'ThirdType');
14 changes: 12 additions & 2 deletions src/task_3/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,18 @@
* использовать тип any для типизации параметров запрещено
* функция должна возвращать сумму двух аргументов
*/
function add(x: string, y: string): string;
function add(x: number, y: number): number;
type srtOrNum = string|number;
function add(x: srtOrNum , y: srtOrNum): srtOrNum{
if(typeof x == "string" && typeof y == "string"){
return x + y;
}
else if(typeof x == "number" && typeof y == "number"){
return x + y;
}
else{
throw new Error('err');
}
};

add('20', '21'); //2021
add(20, 21); //41
30 changes: 23 additions & 7 deletions src/task_4/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,28 @@
* (фактически нужно описать в чём разница между type и interface)
* + к карме, если приведете примеры
*/
interface IFoo {
a: number
b: string

//Interface это всегда объект, а Type может быть другими сущностями.
//interface мы можем расширять(наследовать) например:
interface Animal {
name: string
}

interface Dog extends Animal {
bark: () => void;
}

const dog: Dog = {
name: 'Бобик',
bark: () => console.log('Гав')
}

// interface IFoo {
// a: number
// b: string
// }

type FooType = {
a: number
b: string
};
// type FooType = {
// a: number
// b: string
// };
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: Partial<User>): User[] {
return persons.filter(isUser).filter((user) => {
const criteriaKeys = Object.keys(criteria);
return criteriaKeys.every((fieldName) => {
Expand Down