Sobes.tech
Middle

/** * Առաջադրանք 3: Վերլուծեք ստորև ներկայացված ֆունկցիան և ուղղեք ցանկացած սխալ։ բացատրեք `never` տիպի դերը TypeScript-ում: */ function throwError(): never { throw new Error('Սխալ տեղի ունեցավ'); } /** * Առաջադրանք 4: Փոխակերպեք տրված `MaybeProps` տիպը՝ դարձնելով նրա բոլոր հատկությունները պարտադիր: */ type MaybeProps = { a?: number; b?: string; }; /** * Առաջադրանք 5: Ստեղծեք ընդհանուր `Container` տիպ, որը պարունակում է միայն `value` հատկությունը: * `value`-ի տիպը պետք է սահմանափակվի `string` կամ `number`-ով: */ type Container<T> = { value: T; };

sobes.tech AI

Պատասխան AI-ից

Функция throwError корректна и не содержит ошибок. Она возвращает тип never, что означает, что функция никогда не завершится нормально (например, всегда выбрасывает исключение или бесконечно выполняется).

Роль типа never в TypeScript

Тип never используется для обозначения значений, которые никогда не возникают. Это полезно для функций, которые:

  • Всегда выбрасывают исключение
  • Никогда не возвращают управление (например, бесконечные циклы)

Это помогает компилятору понимать, что после вызова такой функции код не продолжится.


Задача 4: Сделать все свойства MaybeProps обязательными

Для этого можно использовать встроенный утилитный тип Required<T>:

type MaybeProps = {
    a?: number;
    b?: string;
};

type RequiredProps = Required<MaybeProps>;
// Теперь RequiredProps: { a: number; b: string; }

Задача 5: Создать обобщённый тип Container с ограничением на string или number

Для ограничения типа T можно использовать extends:

type Container<T extends string | number> = {
    value: T;
};

// Пример использования:
const stringContainer: Container<string> = { value: "hello" };
const numberContainer: Container<number> = { value: 42 };

// Ошибка:
// const boolContainer: Container<boolean> = { value: true }; // boolean не разрешён