typescript - ajv@7.2.4 - Feil: streng modus: ukjent nøkkelord: "unevaluatedProperties" -


Jeg forventer at ajv-nøkkelordet unevaluatedProperties skal være definert og fungere i ajv versjon 7.2.4, men jeg får feilmeldingen i tittelen.

Her er npm-versjonslisten:

npm list ajv
[email  /mnt/common/github/tscapi
├── [email  
└─┬ [email 
  ├─┬ @eslint/[email 
  │ └── [email  
  ├── [email  
  └─┬ [email 
    └── [email  

Her er koden som gir feilen:

import * as ajv from 'ajv';

const schemas = [
  {
    $id: 'schemas.json#/1',
    anyOf: [{$ref: 'schemas.json#/2'}, {$ref: 'schemas.json#/3'}],
  },
  {
    $id: 'schemas.json#/2',
    type: 'object',
    properties: {
      a: {type: 'string'},
    },
    required: ['a'],
    unevaluatedProperties: true,
  },
  {
    $id: 'schemas.json#/3',
    type: 'object',
    properties: {
      b: {type: 'string'},
    },
    required: ['b'],
    unevaluatedProperties: true,
  },
  {
    $id: 'schemas.json#/4',
    type: 'object',
    allOf: [{$ref: 'schemas.json#/2'}, {$ref: 'schemas.json#/3'}],
    unevaluatedProperties: false,
  },
];

const validators = new ajv.default({schemas: schemas});
{
  const validate = validators.getSchema('schemas.json#/1')!;
  validate({a: 'hello'});
  if (validate.errors) throw new Error(validate.errors[0].message);
  console.log('ok 1');
}
{
  const validate = validators.getSchema('schemas.json#/4')!;
  validate({a: 'hello', b: 'hello'});
  if (validate.errors) throw new Error(validate.errors[0].message);
  console.log('ok 2');
}

I filen node_modules/ajv/README.md finnes følgende tekst, som viser at unevaluatedProperties ikke skal være ukjent i denne versjonen av ajv.

## Using version 7

Ajv version 7 has these new features:
...
- support of JSON Schema draft-2019-09 features: [`unevaluatedProperties`](./docs/json-schema.md#unevaluatedproperties) and [`unevaluatedItems`](./docs/json-schema.md#unevaluateditems), [dynamic recursive references](./docs/guide/combining-schemas.md#extending-recursive-schemas) and other [additional keywords](./docs/json-schema.md#json-schema-draft-2019-09).
...

Jeg har også prøvd å endre én linje i koden

const validators = new ajv.default({schemas: schemas});

til

const opts = {next:true,unevaluated:true}
const validators = new ajv.default(opts).addSchema(schemas);

men fortsatt ingen lykke.

Hva må jeg gjøre for å aktivere unevaluatedProperties?

Svar #1

Det krever eksplisitt å laste de nyere spesifikasjonene via

import Ajv2019 from "ajv/dist/2019"
const ajv = new Ajv2019()

som angitt på en av disse man-sidene:

  • utkast-2019-09-og-utkast-2012-12
  • utkast-2019-09

Relaterte artikler