Skip to content
Snippets Groups Projects
Commit 3c0e7164ac2b authored by Frank Bessou's avatar Frank Bessou :spider_web:
Browse files

fix: make type definitions in Schema.ts more precise

ESchemas now accepts the entity types as generic type parameter.
SchemaEntityTypes is now the subset of "entities" property's keys which
are strings. This is necessary because when the keyword "keyof" is used
on a generic type it returns an union of strings, numbers and symbols.
We only want to keep strings.
parent 9ca18cea9d79
No related branches found
No related tags found
1 merge request!11Topic/default/chores
......@@ -6,7 +6,7 @@
} from "ra-cubicweb/dist/Schema";
function makeSchema<
ESchemas extends EntitiesSchemas,
ESchemas extends EntitiesSchemas<string>,
EntityTypes extends Extract<keyof ESchemas, string>,
RDefs extends RelationDefinition<EntityTypes>[]
>(schema: {
......
......@@ -21,10 +21,11 @@
export type EntitySchema = Record<string, BuildObj>;
export type EntitiesSchemas = {
[type: string]: EntitySchema;
};
export type EntitiesSchemas<EntityTypes extends string> = Record<
EntityTypes,
EntitySchema
>;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export type Schema<
EntityTypes extends string = string,
......@@ -27,11 +28,11 @@
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export type Schema<
EntityTypes extends string = string,
ESchemas extends EntitiesSchemas = EntitiesSchemas,
ESchemas extends EntitiesSchemas<EntityTypes> = EntitiesSchemas<EntityTypes>,
RDefs extends RelationDefinition<EntityTypes>[] = RelationDefinition<EntityTypes>[]
> = {
entities: ESchemas;
relationsDefinitions: RDefs;
};
......@@ -32,7 +33,10 @@
RDefs extends RelationDefinition<EntityTypes>[] = RelationDefinition<EntityTypes>[]
> = {
entities: ESchemas;
relationsDefinitions: RDefs;
};
export type SchemaEntityTypes<S extends Schema<string>> = keyof S["entities"];
export type SchemaEntityTypes<S extends Schema<string>> = Extract<
keyof S["entities"],
string
>;
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment