В C # мы можем использовать тип для определения типа объекта e.g.
if("my string".GetType() == typeof(string)) { // This is a string block }
Чтобы достичь того же на сложном объекте JSON, я написал этот универсальный класс утилиты в Teadercript, чтобы определить тип экземпляра объекта.
export class Mapping { /** * Checks if the given json object is type of a given instance (class/interface) type. * @param jsonObject Object to check. * @param instanceType The type to check for the object. * @returns true if object is of the given instance type; false otherwise. */ public static isTypeOf(jsonObject: Object, instanceType: { new(): T; }): boolean { // Check that all the properties of the JSON Object are also available in the Class. const instanceObject = new instanceType(); for (let propertyName in instanceObject) { if (!jsonObject.hasOwnProperty(propertyName)) { // If any property in instance object is missing then we have a mismatch. return false; } } // All the properties are matching between object and the instance type. return true; }; /** * Checks if the given json object is type of a given instance (class/interface) type. * @param jsonObject Object to check. * @param instanceType The type to check for the object. * @returns true if object is of the given instance type; false otherwise. */ public static isCollectionTypeOf (jsonObjectCollection: any[], instanceType: { new(): T; }): boolean { // Check that all the properties of the JSON Object are also available in the Class. const instanceObject = new instanceType(); for (let jsonObject of jsonObjectCollection) { for (let propertyName in instanceObject) { if (!jsonObject.hasOwnProperty(propertyName)) { // If any property in instance object is missing then we have a mismatch. return false; } } } // All the properties are matching between object and the instance type. return true; }; }; // End of class: Mapping
Надеюсь, кто-то извлекает выгоду из этого решения 🙌 Happy Coding