contentful-typescript-codegen
contentful-typescript-codegen copied to clipboard
Type narrowing not working with current setup
Using the generated types I assume that type narrowing would work fine.
const embeddedEntry = (entry: IEntry) => {
switch (entry.sys.contentType.sys.id) {
case 'article':
entry.fields // Should be known as IArticleFields here
break
case 'page':
entry.fields // Should be known as IPageFields here
}
Weirdly this does not seem to work, even though IArticleEntry should be the only one to have sys.contentType.sys.id as "article".
Is it because of the generic typing?
I faced the same issue and I think it's a limitation from typescript, I ended up using Type predicates to narrow down the type.
As an example you could try:
function isArticle(entry: IEntry): entry is IArticleFields {
return entry.sys.contentType.sys.id === 'article'
}
The downside is that it doesn't work very well with switch statements.