Используйте Object.keys()
, чтобы увидеть, есть ли что-то, что вы можете использовать для проверки. Самые ценные, которые я нашел, это name
& ordinal
. Так что самой простой проверкой будет узнать, можете ли вы позвонить по номеру name()
в Enum.
function test() {
Logger.log(Object.keys(SpreadsheetApp.BorderStyle.DASHED)); // [name, toString, compareTo, ordinal]
Logger.log(SpreadsheetApp.BorderStyle.DASHED.name()); // DASHED
Logger.log("name" in SpreadsheetApp.BorderStyle.DASHED); // true
try {
if ("name" in SpreadsheetApp.BorderStyle.DASHED) { // This is true
Logger.log("SpreadsheetApp.BorderStyle.DASHED is valid enum"); // This should print
}
} catch (err) {};
try {
if ("name" in SpreadsheetApp.BorderStyle.NOT_VALID) { // This errors
Logger.log("SpreadsheetApp.BorderStyle.NOT_VALID is not a valid enum"); // Will not print
}
} catch (err) {
Logger.log("Errored");
};
}
Таким образом, вы можете создать более обобщенную функцию для проверки значений перечисления в SpreadsheetApp (или адаптировать для других служб). Фактически, поскольку передается имя свойства, мы можем более уверенно проверить, что это перечисление, сравнивая имена, а не просто проверяя in
, что также возвращает true для свойств в цепочке прототипов.
/**
* Check if the type and property are a valid Enum of the SpreadsheetApp.
* @param {String} type
* @param {String} property
* @returns {Boolean}
*/
function isSpreadsheetEnum(type, property) {
try {
return SpreadsheetApp[type][property].name() === property;
} catch (err) {
return false;
}
}
Который вы могли бы использовать так:
function testEnum() {
Logger.log(isSpreadsheetEnum("DataValidationCriteria", "DATE_ON_OR_AFTER"));
}