如何检查函数参数是否为 Normalizr 模式 class?
How to check if a function parameter is a Normalizr schema class?
有什么方法可以检查在运行时,函数参数是否是(或不是)Normalizr 模式class?可以是任何类型:实体、数组、对象等
例如:
function processTMDBRespose(response, schema) {
// if 'schema' param is not a normalizr schema, throw!
// some code
}
你可以做也不能做你想做的事。
如果 你给自己写了一个 lint 规则,它只允许从 normalizr 类 创建模式,比如 new schema.Array()
并且禁止使用 shorthand []
,那么你可以使用instanceof
进行检查:
if (
mySchema instanceof schema.Array ||
mySchema instanceof schema.Entity ||
mySchema instanceof schema.Object ||
mySchema instanceof schema.Union ||
mySchema instanceof schema.Values
) {
// your code
} else {
throw new Error('mySchema is not a schema');
}
但是,如果您使用 shorthand,任何数组 []
或普通对象 {}
也分别是 schema.Array
和 schema.Object
的有效模式.这更难验证,因为几乎所有内容都是 JavaScript 中的 typeof Object
(例如 null
)
有什么方法可以检查在运行时,函数参数是否是(或不是)Normalizr 模式class?可以是任何类型:实体、数组、对象等
例如:
function processTMDBRespose(response, schema) {
// if 'schema' param is not a normalizr schema, throw!
// some code
}
你可以做也不能做你想做的事。
如果 你给自己写了一个 lint 规则,它只允许从 normalizr 类 创建模式,比如 new schema.Array()
并且禁止使用 shorthand []
,那么你可以使用instanceof
进行检查:
if (
mySchema instanceof schema.Array ||
mySchema instanceof schema.Entity ||
mySchema instanceof schema.Object ||
mySchema instanceof schema.Union ||
mySchema instanceof schema.Values
) {
// your code
} else {
throw new Error('mySchema is not a schema');
}
但是,如果您使用 shorthand,任何数组 []
或普通对象 {}
也分别是 schema.Array
和 schema.Object
的有效模式.这更难验证,因为几乎所有内容都是 JavaScript 中的 typeof Object
(例如 null
)