@flafy4

Как преобразовать к нужному типу нужные значения в typescript?

У нас есть объект параметров

{
param1: "1",
param2: "string",
param3: "false"
}


Сейчас все значения у нас типа string, но мы знаем что param1 должен быть number, param2 - string, param3 - boolean.
Так же есть класс в котором описаны эти свойства:

export class PageParams {
    param1: number;
    param2: string;
    param3: boolean;
}


Как мне правильно описать функцию которая приведет все значения в объекте к типам которые описаны в классе?
  • Вопрос задан
  • 154 просмотра
Решения вопроса 1
yarkov
@yarkov Куратор тега JavaScript
Помог ответ? Отметь решением.
Если я верно понял задачу, то как-то так:
const obj = {
	param1: "1",
	param2: "string",
	param3: "false"
};

function convertType(prop) {
	try {
		return JSON.parse(prop);
	} catch (e) {
		if (e.name === 'SyntaxError') {
			return prop;
		}
		throw e;
	}
}

Object.entries(obj).forEach(([key, value]) => {
	obj[key] = convertType(value);
});

console.log(obj); // {param1: 1, param2: "string", param3: false}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@abberati
frontend-разработчик
Статических типов в рантайме нет, поэтому и приведение такое реализовать – не два байта переслать. Если хотите надёжное решение, посмотрите в сторону runtypes, эта балалайка умеет в такие преобразования. Но там не из ts-аннотации типа/интерфейса/класса вычисляются типы приведения, а наоборот.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы