Como agregar TypeScript a Nextjs en 2 pasos
Nextjs puede ser de gran ayuda para sacarle provecho a Reactjs, cuando le agregamos TypeScript puede llegar a ser aún mejor.
1- Crear un proyecto de Nextjs, como de costumbre usando npx:
npx create-next-app nextjs-con-typescript --use-npm
2- Agregamos las dependencias necesarias:
npm install --save-dev typescript @types/react @types/node
Una vez instalado todo lo necesario le puedes cambiar la extension al archivo pages/index.js a pages/index.tsx entonces Nextjs generará automáticamente el archivo tsconfig.json que es donde se guardan las configuraciones para transpilar TypeScript.
Listo! Ahora puedes ejecutar tu proyecto y funcionará según lo esperado
npm run dev
Puedes notar que también se generó el archivo next-env.d.ts en la raÃz del proyecto, no necesitamos tocarlo.
Tipos incluidos
Por otro lado Nextjs incluye los tipos que puedas necesitar, para cada uno de los métodos de renderizado:
1import { GetStaticProps, GetStaticPaths, GetServerSideProps } from 'next' 2 3export const getStaticProps: GetStaticProps = async context => { 4 // ... 5} 6 7export const getStaticPaths: GetStaticPaths = async () => { 8 // ... 9} 10 11export const getServerSideProps: GetServerSideProps = async context => { 12 // ... 13}
Tipos para los controladores del api:
import { NextApiRequest, NextApiResponse } from 'next' export default (req: NextApiRequest, res: NextApiResponse) => { // ... }
Para el archivo _app.tsx en caso de que quieras personalizarlo:
1import type { AppProps } from 'next/app' 2 3function MyApp({ Component, pageProps }: AppProps) { 4 return <Component {...pageProps} /> 5} 6 7export default MyApp
También para el archivo _document.tsx:
1import Document, { DocumentContext, Html, Head, Main, NextScript } from "next/document"; 2 3class MyDocument extends Document { 4 static async getInitialProps(ctx: DocumentContext) { 5 const initialProps = await Document.getInitialProps(ctx); 6 7 return initialProps; 8 } 9 10 render() { 11 return ( 12 <Html> 13 <Head /> 14 <body> 15 <Main /> 16 <NextScript /> 17 </body> 18 </Html> 19 ); 20 } 21} 22 23export default MyDocument;
De estas formas Nextjs nos permite incluir TypeScript y sacarle el máximo provecho.