Я хочу убедиться, что JSON, который я загружаю в свои классы машинописи, действителен.
Кроме того, мои классы имеют некоторые логики c, поэтому я хочу, чтобы они оставались классами и не становились интерфейсами.
Мне также нужны проверки типов и обязательные / необязательные проверки.
Сейчас я просто загружаю объект в конструктор и вручную проверяю каждое поле.
Есть ли способ сделать это, используя информацию о типе из машинописного текста?
Я попытался просмотреть сгенерированные javascript файлы, но это просто javascript, и информация о типе уже пропала.
Возможно, есть способ использовать его во время компиляции? в то время машинопись знает тип. Я нашел несколько библиотек, которые делают это, но ни одна из них не имеет дело с типом свойства, а также с необходимостью или нет.
class MyObject {
constructor(json: any) {
if (typeof json.id == 'number') {
this.id = json.id;
} else {
throw new Error('ID is required');
}
if (json.name != undefined) {
if (typeof json.name == 'string') {
this.name = json.name;
} else {
throw new Error('Name exists, but it is not a string!');
}
}
}
id: number; // required
name?: string; // optional
}
try {
let m1: MyObject = {
id: 123
}; // works but m1 is not a class
let isMyObject = m1 instanceof MyObject ? '' : 'not ';
console.log(`m1 is ${isMyObject}instance of MyObject`);
let m2 = new MyObject({
"id": 123
});
let m3 = new MyObject({
"id": 123,
"name": "Mickey"
});
let m4 = new MyObject({
// this will throw an error
});
console.log('OK!');
} catch (error) {
console.log("Error: " + error.message);
}