Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/skn437/skn-next-types
A Simple Type Definition Extension Library For Next.js 14
https://github.com/skn437/skn-next-types
bun library nextjs nodejs react types typescript
Last synced: about 1 month ago
JSON representation
A Simple Type Definition Extension Library For Next.js 14
- Host: GitHub
- URL: https://github.com/skn437/skn-next-types
- Owner: skn437
- License: mit
- Created: 2024-06-09T18:34:56.000Z (7 months ago)
- Default Branch: master
- Last Pushed: 2024-09-16T05:05:24.000Z (3 months ago)
- Last Synced: 2024-11-14T15:54:43.297Z (about 1 month ago)
- Topics: bun, library, nextjs, nodejs, react, types, typescript
- Language: Shell
- Homepage:
- Size: 43 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# SKN Next.js Type Extension Library
> TypeScript Next.js
[![NPM Version](https://img.shields.io/npm/v/%40best-skn%2Fnext-types)](https://www.npmjs.com/package/@best-skn/next-types) [![MIT License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/license/mit)
ย
## **_Introduction:_**
### This is a simple TypeScript Type Extension Library for Next.js 14
### I made this library so that I can use it in all of my Next.js 14 projects without writing the same codes over and over again
ย
## **_Details:_**
### **`ParamProps` Type**
- An interface taking a generic that has `params` property of type `Record`
- `ParamProps` is the prop type for Next.js dynamic route `page.tsx` default exported server component.
- `ParamProps` generic type is actually a string which is the name of the slug i.e. the name of the dynamic id
- The dynamic id can have names like: "slug", "id" etc. which becomes the directory name like: [slug], [id] etc
- For usage instruction, see `Usage` section### **`GenerateMetadata` Type**
- `GenerateMetadata` is the type for Next.js dynamic route `generateMetadata` function
- The generic type which is the dynamic id, must match that of `ParamProps` in a certain dynamic route component
- For usage instruction, see `Usage` section### **`GenerateStaticParams` Type**
- `GenerateStaticParams` is the type for Next.js dynamic route `generateStaticParams` function
- The generic type which is the dynamic id, must match that of `ParamProps` in a certain dynamic route component
- For usage instruction, see `Usage` section### **`NextErrorProps` Type**
- an interface for Next.js `error.tsx` client component
- `NextErrorProps` is the prop type for `error.tsx` default exported functionย
## **_Use Case:_**
- Next.js
ย
## **_Requirements:_**
### This library has peer dependency for React & React DOM of minimum 18.3.1. It may or may not work on 19.x
### This library is intended to be used in Next.js of minimum 14.2.3. It may or may not work on 15.x
- ๐ Minimum [react](https://www.npmjs.com/package/react) Version: `18.3.1`
- ๐ Minimum [@types/react](https://www.npmjs.com/package/@types/react) Version: `18.3.3`
- ๐ Minimum [react-dom](https://www.npmjs.com/package/react-dom) Version: `18.3.1`
- ๐ Minimum [@types/react-dom](https://www.npmjs.com/package/@types/react-dom) Version: `18.3.0`
- ๐ Minimum [next](https://www.npmjs.com/package/next) Version: `14.2.3`ย
## **_Complementary Libraries:_**
- [@best-skn/react-types](https://www.npmjs.com/package/@best-skn/react-types)
ย
## **_Usage:_**
### To install the package, type the following in console
> ```zsh
> npm add -D @best-skn/next-types
> #or
> yarn add -D @best-skn/next-types
> #or
> pnpm add -D @best-skn/next-types
> #or
> bun add -D @best-skn/next-types
> ```### Create a directory called `types` in the root location of your project, and create a file called `next.d.ts`, then do this
> ```typescript
> import "@best-skn/next-types";
> ```### Check your `tsconfig.json`, if `includes` property has `**/*.ts` & `**/*.tsx` or not otherwise the type definition file may not work
### Now Inside your Next.js 14 Project, use the package like this (Just an example)
#### **_`ParamProps`, `GenerateMetadata` & `GenerateStaticParams` Types:_**
#### For any dynamic routes, use like this
> ```typescript jsx
> // Location: app/users/[slug]/page.tsx
> // Dynamic id: slug
> import type {
> GenerateMetadata,
> GenerateStaticParams,
> ParamProps,
> } from "next";
>
> // Generic type here `slug` as the dynamic id is that
> export const generateMetadata: GenerateMetadata<"slug"> = async (props) => {
> const { slug } = props.params;
> // some codes here...
> return {
> // some codes here...
> };
> };
>
> // Generic type here `slug` as the dynamic id is that
> export const generateStaticParams: GenerateStaticParams<"slug"> = async () => {
> // your code for generating static params here...
> // you'll get type safe dynamic route: `slug`
> };
>
> // Generic type here `slug` as the dynamic id is that
> // here `React.SC` type is from my another package: `@best-skn/react-types`
> const User: React.SC> = async (props) => {
> const { slug } = props.params; // you'll get a type safe dynamic id name
>
> return ();
> };
>
> ```#### **_`NextErrorProps` Type:_**
#### For `error.tsx` files, use like this
> ```typescript jsx
> "use client";
>
> import type { NextErrorProps } from "next";
>
> const Error: React.FC = (props) => {
> const { error, reset } = props;
> // some codes here...
> return (
>something...
> );
> };
> ```ย
## **_Dedicated To:_**
- ๐ฉโโ๏ธ`Tanjila Hasan Trina`: The long lost love of my life. The course of nature separated us from our paths and put us in separate places far away from each other. But no matter how separated we are right now, each and every moment of mine is only dedicated to you. We may not see each other in this lifetime as it seems but I will find you again in the next life. I just want to say: `ไธ็ใฏๆฎ้ ทใ ใใใงใๅใๆใใ`
- ๐ฏ`My Parents`: The greatest treasures of my life ever.ย
## **_License:_**
Copyright (C) 2024 SKN Shukhan
Licensed under the MIT License