Я использую MobX, и у меня есть этот репозиторий, содержащий все сущности в моем приложении.
Я хочу иметь две функции
- addEntity: Принимает сущность и обновляет / вставляет ее
- getEntity: Возвращает сущность, если она найдена, иначе не определена
Но я также хочу, чтобы они были безопасны.
Допустим, я храню эту коллекцию:
@observable entities = {
authors: {} as Record<string, Author>,
comments: {} as Record<string, Comment>,
posts: {} as Record<string, Post>
}
Я хочу использовать свою функцию следующим образом:
// "authors" should be checked against "authors" | "posts" | "comments"
// by specifying "authors" statically, I want typescript to automatically refine the return type to be Author, otherwise Author | Posts | Comment
addEntity("authors", new Author(...))
// same here
getEntity("authors", id)
Я пробовал много способов с генериками, но я не могу понять это правильно.
Я должен добавить общий тип, который я печатаю
Поэтому мои звонки таковы:
getEntity<Author>("authors")
// but nothing prevents me from writing
getEntity<Author>("posts")
Есть ли хитрость, чтобы заставить это работать?