Dasturlash

PostgreSQL va TypeScript uchun pg‑typesafe: Kodingizni 100% tipli qilishning yangi yo‘li

26-mart, 2026, 18:3013 ko'rish3 daqiqa o'qish
PostgreSQL va TypeScript uchun pg‑typesafe: Kodingizni 100% tipli qilishning yangi yo‘li

Web‑dasturlashda ma'lumotlar bazasiga murojaat qilish eng ko'p uchraydigan vazifalardan biridir. Ko'pincha SQL so'rovlarini yozganda, natijalar va parametrlar turlari haqida aniq ma'lumotga ega bo'lmaslik xatoliklar va SQL injection kabi xavflarga olib keladi. pg-typesafe bu muammolarni hal qilishga qaratilgan yangi vosita bo'lib, PostgreSQL so'rovlarini TypeScriptda to'liq tiplangan shaklda yaratishga imkon beradi.

pg-typesafe qanday ishlaydi?

Ushbu paket pg kutubxonasining standart funksiyalariga qo'shimcha kod yozishni talab qilmaydi. Faqatgina .sql so'rovi doimiy (ya'ni, string literal) bo'lsa, pg‑typesafe avtomatik ravishda TypeScript tiplarini yaratadi. Natijada quyidagi kod misolida ko'rinib turibdiki, rows o'zgaruvchisi { id: number; name: string; last_modified: Date }[] tipiga ega bo'ladi:

const { rows } = client.query(
  "select id, name, last_modified from tbl where id = $1",
  [42]
);

Bu yerda $1 parametrining number bo'lishi majburiy, shuning uchun noto'g'ri turdagi ma'lumot uzatilsagina, kompilyatsiya bosqichida xato chiqadi.

O'rnatish va birinchi sozlash

  • npm i -D pg-typesafe – paketni dev‑dependency sifatida o'rnatish.
  • Bir marta ishga tushirish: npm exec pg-typesafe -- --connectionString postgres://postgres:example@localhost. Bu buyruq src/defs.gen.ts faylini yaratadi, unda barcha tiplar saqlanadi.
  • Pool obyektini tiplangan qilib e'lon qilish: import type { TypesafePool } from "./defs.gen.ts"; export const pool = new Pool() as TypesafePool;.

Endi har bir query chaqirig'i pg‑typesafe tomonidan tahlil qilinadi va kerakli tiplar avtomatik yangilanadi.

BIGINT va JSONB bilan ishlash

PostgreSQL BIGINT qiymatlari JavaScript number turida aniq ifodalanmaydi, shuning uchun pg‑typesafe standart holatda ularni string sifatida qaytaradi. Node.js 10+ versiyalarida bigint turi qo‘llab‑quvvatlanadi, shuning uchun quyidagi kod bilan tipni o‘zgartirish mumkin:

import { types } from "pg";
types.setTypeParser(20, val => BigInt(val));

pg‑typesafe konfiguratsiyasida transformParameter va transformField funksiyalarini qayta belgilash orqali bigint tipini avtomatik tanishtirish mumkin.

JSONB ustunlari uchun ham maxsus tiplar yaratish oson. Masalan, hello_data interfeysini jsonb_columns.ts faylida belgilab, pg‑typesafe konfiguratsiyasida ustun nomiga mos keluvchi tipni import qilish orqali, ma'lumotlar strukturasi aniq ko‘rinadi.

Qayerda va qanday foyda beradi?

pg‑typesafe asosan quyidagi holatlarda foydalidir:

  • Katta jamoalar bilan ishlashda kodning tip xavfsizligini ta'minlash.
  • IDE (VS Code, WebStorm) orqali avtomatik autocomplete va tip tekshiruvi.
  • SQL injection xavfini kamaytirish – parametrlar doimo tipga mos keladi.
  • Runtimeda qo‘shimcha kutubxonalar talab qilinmaydi, shuning uchun ilova hajmi o‘zgarmaydi.

Shuningdek, pg‑typed, kysely, Zapatos kabi boshqa tip‑xavfsiz PostgreSQL kutubxonalari bilan solishtirganda, pg‑typesafe minimal sintaksis bilan ishlaydi, ya'ni pgning asl API sini o‘zgartirmasdan foydalanish mumkin.

Qisqa xulosa

pg‑typesafe – bu TypeScript dasturchilari uchun PostgreSQL so‘rovlarini 100 % tiplangan qilishni soddalashtiruvchi vosita. U pgning standart funksiyalariga qo‘shimcha kod kiritmaydi, lekin kompilatsiya bosqichida tiplarni yaratadi, bu esa xatoliklarni erta bosqichda aniqlash va kodni yanada barqaror qilishga yordam beradi. Agar siz Node.jsda PostgreSQL bilan ishlayotgan bo‘lsangiz, pg‑typesafe’ni sinab ko‘rish orqali loyiha xavfsizligini va ishlab chiqish tezligini sezilarli darajada oshirishingiz mumkin.

Manba: Hacker News
#PostgreSQL #TypeScript #pg-typesafe #type-safe queries #Node.js
Telegram da muhokama qilish