From 1732519f8b62a114ff3a047e3226862ea5b71c1d Mon Sep 17 00:00:00 2001 From: "petr.diukin" Date: Thu, 1 Apr 2021 12:25:11 +0500 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BA=D1=8E=D0=B8=D0=BD=20=D0=9F=D0=B5?= =?UTF-8?q?=D1=82=D1=80,=20ts-1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 6 ++++++ package.json | 4 +++- src/task_1/index.ts | 17 ++++++++++------- src/task_2/index.ts | 12 +++++------- src/task_3/index.ts | 12 +++--------- src/task_4/index.ts | 13 ++++++++----- src/task_5/index.ts | 15 ++++++++------- 7 files changed, 43 insertions(+), 36 deletions(-) diff --git a/package-lock.json b/package-lock.json index c6a18e7..b64adc2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,12 @@ "version": "1.20150623.0", "resolved": "https://registry.npmjs.org/tsc/-/tsc-1.20150623.0.tgz", "integrity": "sha1-Trw8d04WkUjLx2inNCUz8ILHpuU=" + }, + "typescript": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.3.tgz", + "integrity": "sha512-qOcYwxaByStAWrBf4x0fibwZvMRG+r4cQoTjbPtUlrWjBHbmCAww1i448U0GJ+3cNNEtebDteo/cHOR3xJ4wEw==", + "dev": true } } } diff --git a/package.json b/package.json index 0d703f8..7fbd1a3 100644 --- a/package.json +++ b/package.json @@ -20,5 +20,7 @@ "dependencies": { "tsc": "^1.20150623.0" }, - "devDependencies": {} + "devDependencies": { + "typescript": "^4.2.3" + } } diff --git a/src/task_1/index.ts b/src/task_1/index.ts index 3edb7b9..b952105 100644 --- a/src/task_1/index.ts +++ b/src/task_1/index.ts @@ -1,10 +1,13 @@ - /** Задача 1 - * Требуется описать типы FooType и BarType так, чтобы код, - * который написан в функции logObj компилировался и исполнялся корректно -*/ - -type FooType = unknown; -type BarType = unknown; +type FooType = { + stringProp: string, + numberProp: number, + barObject: BarType, +}; +type BarType = { + stringsArrayProp: string[], + numbersOrDatesArrayProp: Array, + functionProp: Function +}; export const fooObjects: FooType[] = [ { diff --git a/src/task_2/index.ts b/src/task_2/index.ts index 00b4939..298fc3f 100644 --- a/src/task_2/index.ts +++ b/src/task_2/index.ts @@ -1,10 +1,3 @@ -/** Задача 2 - * Требуется реализовать функцию filter, которая будет принимать - * массив с объектами 3х типов - * наименование типа - * возврщать массив с объектами, которые имеют тип, указанный во втором аргументе -*/ - enum System { Linux = 0, Window = 1, @@ -71,6 +64,11 @@ const obj7: ThirdType = { const array = [obj1, obj2, obj3, obj4, obj5, obj6, obj7]; function filter(array: Array, type: string) { + let res: any[] = []; + array.forEach(item => { + if (typeof item === type) res.push(item) + }); + return res; } filter(array, 'FirstType'); diff --git a/src/task_3/index.ts b/src/task_3/index.ts index b7c9cdc..a7bfc5a 100644 --- a/src/task_3/index.ts +++ b/src/task_3/index.ts @@ -1,12 +1,6 @@ -/** Задача 3 - * Требуется реализовать функцию add, которая будет иметь 2 сигнатуры - * 1 - принимает 2 аргумента: x, y оба типа string и возвращает тип string - * 2 - принимает 2 аргумента: x, y оба типа number и возвращает тип number - * использовать тип any для типизации параметров запрещено - * функция должна возвращать сумму двух аргументов -*/ -function add(x: string, y: string): string; -function add(x: number, y: number): number; +function add(x: string | number, y: string | number): string | number { + return typeof x === "string" ? x + y : x + y; +} add('20', '21'); //2021 add(20, 21); //41 \ No newline at end of file diff --git a/src/task_4/index.ts b/src/task_4/index.ts index e884df8..67fe66e 100644 --- a/src/task_4/index.ts +++ b/src/task_4/index.ts @@ -1,8 +1,3 @@ -/** Задача 4 - * Разобраться и описать в чём заключается разница между IFoo и FooType - * (фактически нужно описать в чём разница между type и interface) - * + к карме, если приведете примеры -*/ interface IFoo { a: number b: string @@ -12,3 +7,11 @@ type FooType = { a: number b: string }; + +/** + * Возможно, это будет несовсем честно, но еще неск. месяцев назад рассматривал эту статью + * (https://stackoverflow.com/questions/37233735/typescript-interfaces-vs-types) из-за чего + * мое понимание в их различии стало именно таким. Думаю, что нет смысла копировать и переводить + * материал оттуда, да и врать, что взял все это из головы - тоже..) + * В любом случае извините...) +*/ \ No newline at end of file diff --git a/src/task_5/index.ts b/src/task_5/index.ts index ef3e0c0..35c663e 100644 --- a/src/task_5/index.ts +++ b/src/task_5/index.ts @@ -1,9 +1,3 @@ -/** Задача 4 - * Измените объявление функции filterUsers так, чтобы - * в аргумент criteria можно было передавать объект, - * содержащий любое поле или поля объекта User -*/ - interface User { type: string; name: string; @@ -11,6 +5,13 @@ interface User { occupation: string; } +interface HybridUser { + type?: string; + name?: string; + age?: number; + occupation?: string; +} + interface Admin { type: string; name: string; @@ -73,7 +74,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: HybridUser): User[] { return persons.filter(isUser).filter((user) => { const criteriaKeys = Object.keys(criteria); return criteriaKeys.every((fieldName) => {