From c8bda2eae7f44ec4a284cc26fc85051a9a45e192 Mon Sep 17 00:00:00 2001 From: Karl-Philipp Wulfert Date: Tue, 2 Apr 2019 15:37:10 +0200 Subject: [PATCH] feat: add conditional "maps" for associated types Fixes #50 --- src/core/Classes.ts | 104 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 81 insertions(+), 23 deletions(-) diff --git a/src/core/Classes.ts b/src/core/Classes.ts index 749b5067..7b1dcd06 100644 --- a/src/core/Classes.ts +++ b/src/core/Classes.ts @@ -13,29 +13,29 @@ * this program. If not, see . */ import {SCThingType} from './Thing'; -import {SCAcademicEvent, SCAcademicEventMeta} from './things/AcademicEvent'; -import {SCArticle, SCArticleMeta} from './things/Article'; -import {SCBook, SCBookMeta} from './things/Book'; -import {SCBuilding, SCBuildingMeta} from './things/Building'; -import {SCCatalog, SCCatalogMeta} from './things/Catalog'; -import {SCCourseOfStudies, SCCourseOfStudiesMeta} from './things/CourseOfStudies'; -import {SCDateSeries, SCDateSeriesMeta} from './things/DateSeries'; -import {SCDiff, SCDiffMeta} from './things/Diff'; -import {SCDish, SCDishMeta} from './things/Dish'; -import {SCFavorite, SCFavoriteMeta} from './things/Favorite'; -import {SCFloor, SCFloorMeta} from './things/Floor'; -import {SCMessage, SCMessageMeta} from './things/Message'; -import {SCOrganization, SCOrganizationMeta} from './things/Organization'; -import {SCPerson, SCPersonMeta} from './things/Person'; -import {SCPointOfInterest, SCPointOfInterestMeta} from './things/PointOfInterest'; -import {SCRoom, SCRoomMeta} from './things/Room'; -import {SCSemester, SCSemesterMeta} from './things/Semester'; -import {SCSetting, SCSettingMeta} from './things/Setting'; -import {SCSportCourse, SCSportCourseMeta} from './things/SportCourse'; -import {SCTicket, SCTicketMeta} from './things/Ticket'; -import {SCToDo, SCToDoMeta} from './things/ToDo'; -import {SCTour, SCTourMeta} from './things/Tour'; -import {SCVideo, SCVideoMeta} from './things/Video'; +import {SCAcademicEvent, SCAcademicEventMeta, SCAcademicEventWithoutReferences} from './things/AcademicEvent'; +import {SCArticle, SCArticleMeta, SCArticleWithoutReferences} from './things/Article'; +import {SCBook, SCBookMeta, SCBookWithoutReferences} from './things/Book'; +import {SCBuilding, SCBuildingMeta, SCBuildingWithoutReferences} from './things/Building'; +import {SCCatalog, SCCatalogMeta, SCCatalogWithoutReferences} from './things/Catalog'; +import {SCCourseOfStudies, SCCourseOfStudiesMeta, SCCourseOfStudiesWithoutReferences} from './things/CourseOfStudies'; +import {SCDateSeries, SCDateSeriesMeta, SCDateSeriesWithoutReferences} from './things/DateSeries'; +import {SCDiff, SCDiffMeta, SCDiffWithoutReferences} from './things/Diff'; +import {SCDish, SCDishMeta, SCDishWithoutReferences} from './things/Dish'; +import {SCFavorite, SCFavoriteMeta, SCFavoriteWithoutReferences} from './things/Favorite'; +import {SCFloor, SCFloorMeta, SCFloorWithoutReferences} from './things/Floor'; +import {SCMessage, SCMessageMeta, SCMessageWithoutReferences} from './things/Message'; +import {SCOrganization, SCOrganizationMeta, SCOrganizationWithoutReferences} from './things/Organization'; +import {SCPerson, SCPersonMeta, SCPersonWithoutReferences} from './things/Person'; +import {SCPointOfInterest, SCPointOfInterestMeta, SCPointOfInterestWithoutReferences} from './things/PointOfInterest'; +import {SCRoom, SCRoomMeta, SCRoomWithoutReferences} from './things/Room'; +import {SCSemester, SCSemesterMeta, SCSemesterWithoutReferences} from './things/Semester'; +import {SCSetting, SCSettingMeta, SCSettingWithoutReferences} from './things/Setting'; +import {SCSportCourse, SCSportCourseMeta, SCSportCourseWithoutReferences} from './things/SportCourse'; +import {SCTicket, SCTicketMeta, SCTicketWithoutReferences} from './things/Ticket'; +import {SCToDo, SCToDoMeta, SCToDoWithoutReferences} from './things/ToDo'; +import {SCTour, SCTourMeta, SCTourWithoutReferences} from './things/Tour'; +import {SCVideo, SCVideoMeta, SCVideoWithoutReferences} from './things/Video'; /* tslint:disable:variable-name */ /** @@ -103,3 +103,61 @@ export type SCThings = * A field of a thing */ export type SCThingsField = keyof SCThings | string; + +/** + * Thing without references for a thing + */ +export type SCAssociatedThingWithoutReferences = + THING extends SCAcademicEvent ? SCAcademicEventWithoutReferences : + THING extends SCArticle ? SCArticleWithoutReferences : + THING extends SCBook ? SCBookWithoutReferences : + THING extends SCBuilding ? SCBuildingWithoutReferences : + THING extends SCCatalog ? SCCatalogWithoutReferences : + THING extends SCCourseOfStudies ? SCCourseOfStudiesWithoutReferences : + THING extends SCDateSeries ? SCDateSeriesWithoutReferences : + THING extends SCDiff ? SCDiffWithoutReferences : + THING extends SCDish ? SCDishWithoutReferences : + THING extends SCFavorite ? SCFavoriteWithoutReferences : + THING extends SCFloor ? SCFloorWithoutReferences : + THING extends SCMessage ? SCMessageWithoutReferences : + THING extends SCOrganization ? SCOrganizationWithoutReferences : + THING extends SCPerson ? SCPersonWithoutReferences : + THING extends SCPointOfInterest ? SCPointOfInterestWithoutReferences : + THING extends SCRoom ? SCRoomWithoutReferences : + THING extends SCSemester ? SCSemesterWithoutReferences : + THING extends SCSetting ? SCSettingWithoutReferences : + THING extends SCSportCourse ? SCSportCourseWithoutReferences : + THING extends SCTicket ? SCTicketWithoutReferences : + THING extends SCToDo ? SCToDoWithoutReferences : + THING extends SCTour ? SCTourWithoutReferences : + THING extends SCVideo ? SCVideoWithoutReferences : + never; + +/** + * Thing for a thing without references + */ +export type SCAssociatedThing = + THING extends SCAcademicEventWithoutReferences ? SCAcademicEvent : + THING extends SCArticleWithoutReferences ? SCArticle : + THING extends SCBookWithoutReferences ? SCBook : + THING extends SCBuildingWithoutReferences ? SCBuilding : + THING extends SCCatalogWithoutReferences ? SCCatalog : + THING extends SCCourseOfStudiesWithoutReferences ? SCCourseOfStudies : + THING extends SCDateSeriesWithoutReferences ? SCDateSeries : + THING extends SCDiffWithoutReferences ? SCDiff : + THING extends SCDishWithoutReferences ? SCDish : + THING extends SCFavoriteWithoutReferences ? SCFavorite : + THING extends SCFloorWithoutReferences ? SCFloor : + THING extends SCMessageWithoutReferences ? SCMessage : + THING extends SCOrganizationWithoutReferences ? SCOrganization : + THING extends SCPersonWithoutReferences ? SCPerson : + THING extends SCPointOfInterestWithoutReferences ? SCPointOfInterest : + THING extends SCRoomWithoutReferences ? SCRoom : + THING extends SCSemesterWithoutReferences ? SCSemester : + THING extends SCSettingWithoutReferences ? SCSetting : + THING extends SCSportCourseWithoutReferences ? SCSportCourse : + THING extends SCTicketWithoutReferences ? SCTicket : + THING extends SCToDoWithoutReferences ? SCToDo : + THING extends SCTourWithoutReferences ? SCTour : + THING extends SCVideoWithoutReferences ? SCVideo : + never;