The transformTypescriptToJavascript utility transforms TypeScript/TSX code into JavaScript/JSX using Babel, preserving formatting and automatically generating JavaScript variants for documentation and demos.
.ts → .js and .tsx → .jsx transformationsimport transformTypescriptToJavascript from '@mui/internal-docs-infra/pipeline/transformTypescriptToJavascript';
// Transform TypeScript to JavaScript
const result = await transformTypescriptToJavascript(
'const x: number = 1;\ninterface Props { name: string; }',
'example.ts',
);
// Returns:
// {
// js: {
// source: 'const x = 1;\n',
// fileName: 'example.js'
// }
// }
The utility is also available as a source transformer for automatic processing:
import { TypescriptToJavascriptTransformer } from '@mui/internal-docs-infra/pipeline/transformTypescriptToJavascript';
// Transformer configuration
// {
// extensions: ['ts', 'tsx'],
// transformer: transformTypescriptToJavascript
// }
The underlying removeTypes function supports Prettier configuration:
import { removeTypes } from '@mui/internal-docs-infra/pipeline/transformTypescriptToJavascript/removeTypes';
// With default Prettier formatting
const formatted = await removeTypes(code, 'file.ts', true);
// With custom Prettier options
const customFormatted = await removeTypes(code, 'file.ts', {
singleQuote: false,
tabWidth: 4,
});
// Skip Prettier formatting entirely
const unformatted = await removeTypes(code, 'file.ts', false);
: string, : number, etc.).tsx files)*.ts files → *.js files*.tsx files → *.jsx files// Input (TypeScript)
interface ButtonProps {
onClick: () => void;
children: React.ReactNode;
}
const Button: React.FC<ButtonProps> = ({ onClick, children }) => {
return <button onClick={onClick}>{children}</button>;
};
// Output (JavaScript)
const Button = ({ onClick, children }) => {
return <button onClick={onClick}>{children}</button>;
};
CodeHighlighterCodeHighlighter - Uses this transformer for variant generationCodeProvider - Framework for code transformationsThis implementation is based on ember-cli/babel-remove-types but converted to use Babel standalone with added TSX support for React components.