Почему TypeScript не реализует приведение типов, а только утверждение типа? Я не ищу ответ для своего кода, а по той причине, что приведение типов не реализовано в TypeScript, и почему мы не должны (предположение!) реализовать его самостоятельно.
Пример. У меня есть интерфейс TypeScript, получающий JSON-данные от бэкэнда через AJAX-вызовы, имеющий элементы в элементах в элементах. Речь идет о еде, и вы должны платить цену, умноженную на час дня.
Мы получили этот JSON:
{
"food" : [{
"name" : "pizza",
"price" : 1.234
"ingredients" : [
"name" : "cheese",
"extra_price" : 1.2345
]
}
]
}
И у нас есть эти классы:
class Food {
public name : string;
public price : number;
public ingredients : Ingredient[];
public timePrice() : number {
return this.price * (new Date()).getHours();
}
}
class Ingredient {
public name : string;
public extra_price : number;
}
Если мы приведем эти типы с помощью TypeScript, мы сможем прекрасно использовать свойства, включая ингредиенты. Отлично.
Но: Мы не можем использовать функцию timePrice. Потому что TypeScript выполняет утверждение типа, а НЕ приведение типов.
Я знаю вариант, что вы можете написать конструктор, создающий класс, когда вы передаете свойства в качестве параметров, но если у вас есть элементы в элементах в элементах: не вариант. Поэтому единственный вариант исправить это для меня — создать класс Utils со статической функцией и параметрами Food и Ingredient. Это работает.
Но почему? В чем проблема с приведением типов, что оно не реализовано в TypeScript? Мне кажется, это не так сложно построить, но поскольку MicroSoft этого не делала, должны быть непреодолимые проблемы при этом.