mswjs / data

Data modeling and relation library for testing JavaScript applications.
https://npm.im/@mswjs/data
MIT License
823 stars 52 forks source link

Typing issue when returning relation properties #300

Open SalahAdDin opened 9 months ago

SalahAdDin commented 9 months ago

So, we have the following database:

const db = factory({
  article: {
    id: primaryKey(() => _articleId++),
    title: () => title,
    slug: () => faker.helpers.slugify(title),
    author: nullable(manyOf("author")),
    thumbnail: oneOf("image"),
    category: oneOf("category"),
    createdDate: () => faker.date.anytime(),
    publishedDate: () => faker.date.anytime(),
    introduction: () => faker.lorem.text(),
    content: {
      // TODO: https://github.com/mswjs/data/issues/299
      root: () => mockRichText(),
    },
    hero: {
      url: () => faker.image.url({ width, height }),
      alt: () => faker.lorem.text(),
      width: () => width,
      height: () => height,
      caption: {
        source: () => faker.lorem.word(),
        description: () => faker.lorem.text(),
      },
    },
    // content: () => ({ root: () => mockRichText() }),
    source: nullable(() => faker.lorem.word()),
    tags: () => mockArray(6, () => faker.lorem.word()),
    continue: oneOf("relatedArticle"),
    related: nullable(manyOf("relatedArticle")),
  },
...
  category: {
    id: primaryKey(() => _categoryId++),
    title: () => categoryTitle,
    slug: () => faker.helpers.slugify(categoryTitle),
  },
...
});

And we want to implement a function to return all articles' slug and their categories' slugs as well:

export const articlePaths = () =>
  db.article.findMany({}).map((a) => ({
    category: a.category.slug,
    slug: a.slug,
  }));

Unfortunately, it fails on typing: image

Why is this?

When assigning only the category, it does not give any issue.

It should not give any issue when getting relation properties.