Open emadbaqeri opened 10 months ago
I should mention that I'm doing a type casting using as
and this doesn't make me happy but it does the job.
type Content = GrayMatterFile<string> & {
data: { title: string, description: string }
}
const content = parsedContent as Content
I would enjoy a similar feature. As is, I'm just assigning a new object from my file parsing function using just the fields I expect, and returning that, but being able to specify the type on the return from matter()
would be super handy.
Actually, it looks like this issue has been brought up before, and has been open for a long time with no feedback from the library author. Kind of disappointing. https://github.com/jonschlinkert/gray-matter/issues/135
I am trying to find where but someone posted this code snippet and its made my life easier
import matter from 'gray-matter';
const typedMatter = <T = any>(markdown: string) => {
const rawMatter = matter(markdown);
return {
...rawMatter,
data: rawMatter.data as T,
};
};
export default typedMatter;
The
matter
function currently returns aGrayMatterFile<string>
, which loses type information about the expecteddata
shape.It would be better to allow passing a generic type parameter for the
data
property, like this:This way consumer code could get type safety when accessing the metadata.
For example in my case I'm parsing MDX files that expect title and description in the frontmatter. With generic data types I could get code completion and validation for those fields.
Potentially the GrayMatterFile type could be updated to add a second generic parameter:
Please let me know your idea, and even let me know if I can do this in the current version of the lovely
gray-matter
.