如何检查函数参数是否为 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.Arrayschema.Object 的有效模式.这更难验证,因为几乎所有内容都是 JavaScript 中的 typeof Object(例如 null