Как проверить, что json объект, загруженный в класс машинописи, правильный? - PullRequest
1 голос
/ 18 марта 2020

Я хочу убедиться, что 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...