TypeScript
Faust has built-in TypeScript support, which means you can use TypeScript to type your Faust components, hooks, and plugins. This may not be exhaustive but should show you common patterns for typing your Faust code.
Typing Faust Components
FaustTemplatefor WP Template pages.WordPressBlockfor block components.GetStaticProps,GetServerSideProps, andGetStaticPathsfrom Next.js for data-fetching methods.FaustHooksfor hooking into the Faust plugin system.
Here’s a quick example using [...wordpressNode].tsx:
import { getWordPressProps, WordPressTemplate } from "@faustwp/core";
import { GetStaticPaths, GetStaticProps } from "next";
export type WordPressTemplateProps = Parameters<typeof WordPressTemplate>[0];
export default function Page(props: WordPressTemplateProps) {
return <WordPressTemplate {...props} />;
}
export const getStaticProps: GetStaticProps = (ctx) => {
return getWordPressProps({ ctx });
};
export const getStaticPaths: GetStaticPaths = () => {
return {
paths: [],
fallback: "blocking",
};
};Typing Faust Plugins
When creating Faust plugins, you can use the FaustHooks type to get autocompletion and type-safety for the hooks system:
import { FaustHooks, FaustPlugin } from "@faustwp/core";
export class ProjectTemplatePlugin implements FaustPlugin {
constructor() {}
apply(hooks: FaustHooks) {
hooks.addFilter("possibleTemplatesList", "faust", (templates, data) => {
if (data?.seedNode?.__typename === "Project") {
return Array.from(new Set(["project", ...templates]));
}
return templates;
});
}
}Because FaustHooks knows about available filters and hooks, TypeScript will automatically guide you on what the callback signatures should look like.
