@SikaRashka

Как создать Тип функции, принимающей тип и возвращающей интерфейс?

Помогите, пожалуйста правильно сформулировать функцию.
Создать тип, представляющий собой число или строку.
Создать интерфейс с полем resultedType: string.
Создать тип, описывающий функцию, которая принимает созданный тип а возвращает созданный интерфейс.
Если в функцию было передано число, в возвращаемом объекте в resultedType должно лежать "number", если была передана строка, в возвращаемoм объекте в resultedType должно лежать "string.

const user: number | string;

interface Num {
resultedType: string,
}

const evgeniy = (x: name): Num {
if (name === number) {
log.info(Num.resultedType = number);
} else if (name === string) {
log.info(Num.resultedType = string);
}
}
  • Вопрос задан
  • 69 просмотров
Решения вопроса 1
modelair
@modelair
unsocial
type User = string | number

interface Num {
  resultedType: string
}

function superFunction(user: User): Num {
    return {resultedType: typeof user}
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
WblCHA
@WblCHA
interface Num <T>{
    resultedType: T extends { valueOf: () => infer P } ? P : never
}

const evgeniy = <T extends string | number>(x: T): Num<T> {
Ответ написан
Комментировать
bingo347
@bingo347 Куратор тега TypeScript
Crazy on performance...
type TypeMap = {
  string: string;
  number: number;
  bigint: bigint;
  boolean: boolean;
  symbol: symbol;
  undefined: undefined;
  object: object;
  function: Function;
};

type TypeName<T> = {
  [K in keyof TypeMap]: T extends TypeMap[K] ? K : never;
}[keyof TypeMap];


const evgeniy = <T extends string | number>(x: T) => ({
  resultedType: typeof x as TypeName<T>,
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы