Transformery danych do serializacji
Wykorzystają Państwo transformatory danych tRPC do serializowania i deserializowania niestandardowych typów danych, takich jak Dates lub BigInts.
Transformery danych do serializacji to bezpłatna lekcja tRPC End-to-End Type Safe APIs na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej tRPC End-to-End Type Safe APIs, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs tRPC End-to-End Type Safe APIs zawiera 4 lekcji w sumie.
Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.
What are Data Transformers?
When building APIs, data often needs to be sent between different systems. This process is called serialization (converting data to a transportable format like JSON) and deserialization (converting it back).
tRPC's data transformers help handle complex data types that JSON doesn't natively support, ensuring they arrive on the client side just as they left the server.
JSON's Data Type Limits
JSON (JavaScript Object Notation) is great, but it has limitations. It natively supports strings, numbers, booleans, null, objects, and arrays.
- Dates: JSON represents dates as strings, losing their Date object functionality.
- BigInts: Large integer numbers (BigInt) are not a native JSON type.
- Maps, Sets, RegExps: These also don't have direct JSON representations.
Without transformers, these types can break or change unexpectedly when sent via tRPC.
Default tRPC Serialization
By default, tRPC uses standard JSON JSON.stringify() and JSON.parse() for data transfer. This means any data types not supported by JSON will be converted to their closest JSON representation.
For example, a JavaScript Date object will become an ISO 8601 string, and a BigInt will throw an error if not handled.
Introducing SuperJSON
To overcome JSON's limitations, tRPC allows you to plug in a custom data transformer. The most popular choice is superjson.
superjson is a library that extends JSON's capabilities, allowing it to serialize and deserialize many common JavaScript types, including Date, BigInt, Map, Set, and more, while preserving their original type.
Server Setup with SuperJSON
Integrating superjson on the server is straightforward. You pass it to initTRPC when initializing your tRPC instance. This tells tRPC to use superjson for all serialization.
First, install it: npm install superjson
import { initTRPC } from '@trpc/server';
import superjson from 'superjson';
// Initialize tRPC with superjson transformer
export const t = initTRPC.context().transformer(superjson).create();
// Example of a tRPC router definition (conceptual):
// export const appRouter = t.router({
// hello: t.procedure.query(() => {
// return { message: 'Hello, tRPC!', now: new Date() };
// }),
// });Client Setup with SuperJSON
On the client side, you also need to tell your tRPC client to use superjson. This ensures that the data received from the server is correctly deserialized back into its original JavaScript types.
The setup varies slightly depending on your client (e.g., React Query, vanilla client).
import { createTRPCReact } from '@trpc/react-query';
import superjson from 'superjson';
// import type { AppRouter } from '../server/trpc'; // Adjust path
// Initialize tRPC client with superjson transformer
export const trpc = createTRPCReact<any>({
transformer: superjson,
});
// Example client usage (conceptual):
// function MyComponent() {
// const hello = trpc.hello.useQuery();
// if (hello.data) {
// console.log(hello.data.now instanceof Date); // true!
// }
// return <p>...</p>;
// }Dates: Before & After
Let's see how superjson handles a Date object. Without it, a Date becomes a string. With superjson, it remains a Date object.
Run this example to see the serialization and deserialization process:
import superjson from 'superjson';
function main() {
const originalDate = new Date();
console.log("Original:", originalDate.toISOString());
console.log("Is Date (original):", originalDate instanceof Date);
// Simulate serialization (like tRPC server would do)
const serialized = superjson.stringify({ date: originalDate });
console.log("Serialized:", serialized);
// Simulate deserialization (like tRPC client would do)
const deserialized = superjson.parse(serialized) as { date: Date };
console.log("Deserialized:", deserialized.date.toISOString());
console.log("Is Date (deserialized):", deserialized.date instanceof Date);
}
main();BigInts: From String to Type
BigInt values are used for integers larger than Number.MAX_SAFE_INTEGER. JSON doesn't support them. superjson correctly serializes them as strings and deserializes them back into BigInt types.
Try this example:
import superjson from 'superjson';
function main() {
const originalBigInt = 9007199254740991n + 100n; // A BigInt
console.log("Original:", originalBigInt);
console.log("Type (original):", typeof originalBigInt);
// Simulate serialization
const serialized = superjson.stringify({ value: originalBigInt });
console.log("Serialized:", serialized);
// Simulate deserialization
const deserialized = superjson.parse(serialized) as { value: bigint };
console.log("Deserialized:", deserialized.value);
console.log("Type (deserialized):", typeof deserialized.value);
console.log("Is equal:", originalBigInt === deserialized.value);
}
main();Beyond Dates & BigInts
superjson isn't just for Date and BigInt. It also supports many other JavaScript types:
MapandSetRegExpErrorobjectsURLobjects- Even custom classes (with some configuration!)
This makes superjson a powerful tool for maintaining type fidelity across your tRPC application.
Transformer Check
Imagine you have a tRPC procedure that returns a JavaScript Date object and a BigInt. Which of the following statements are true about using superjson transformers in tRPC?
Recap: Data Transformers
In this lesson, we learned about tRPC's data transformers, specifically focusing on superjson.
- JSON's limitations prevent native serialization of types like
DateandBigInt. superjsonprovides a robust solution to serialize and deserialize these complex types, preserving their original form.- It requires configuration on both the tRPC server and client.
superjsonsupports many other types beyond Dates and BigInts, enhancing type safety across your application.
This ensures your data remains consistent and type-safe from end-to-end!
Ucz się tRPC End-to-End Type Safe APIs dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 10
- Lekcje
- 40
Często zadawane pytania
Czy lekcja „Transformery danych do serializacji” jest bezpłatna?
Tak — pełny tekst „Transformery danych do serializacji” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu tRPC End-to-End Type Safe APIs, przejdź na CoddyKit PRO. Kurs tRPC End-to-End Type Safe APIs zawiera 4 lekcji w sumie.
Co nauczysz się w „Transformery danych do serializacji”?
Wykorzystają Państwo transformatory danych tRPC do serializowania i deserializowania niestandardowych typów danych, takich jak Dates lub BigInts. Ćwiczysz tRPC End-to-End Type Safe APIs z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć tRPC End-to-End Type Safe APIs?
Nie wymagamy żadnego doświadczenia. tRPC End-to-End Type Safe APIs w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Transformery danych do serializacji”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji tRPC End-to-End Type Safe APIs?
Tak. Każda lekcja tRPC End-to-End Type Safe APIs zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Elegancka obsługa błędów tRPC
- Niestandardowe typy błędów
- Transformery danych do serializacji
- Formatowanie błędów i informacje zwrotne z walidacji pól