PostgreSQL에서 TypeScript 정의 생성
10844 단어 databasetypescriptjavascriptpostgres
운 좋게도 solution이 있습니다! 다음과 같은 데이터베이스 테이블이 있다고 가정합니다(Knex 마이그레이션).
await db.raw(`
CREATE DOMAIN short_id
AS text CHECK(VALUE ~ '^[0-9a-z]{6}$')`);
await db.raw(`
CREATE TYPE user_role
AS ENUM ('consumer', 'provider')`);
await db.schema.createTable("user", (table) => {
table.specificType("id", "short_id").notNullable().primary();
table.specificType("email", "citext").unique();
table.text("name").notNullable();
table.jsonb("credentials").notNullable().defaultTo("{}");
table.specificType("role", "user_role").notNullable();
table.timestamps(false, true);
});
User
(class) 및 UserRole
(enum) 데이터 모델이 있으면 TypeScript와 함께 Knex.js를 최대한 활용할 수 있습니다.import db, { User, UserRole } from "./db";
const [user] = await db
.table<User>("user")
.insert({ id: "1", name: "John", role: UserRole.Provider })
.onConflict()
.merge()
.returning("*");
이 특정 데이터베이스 스키마에 대한 TypeScript 정의는 다음과 같습니다.
export enum UserRole {
Consumer = "consumer",
Provider = "provider",
}
export type User = {
id: string;
email: string | null;
name: string;
credentials: Record<string, unknown>;
role: UserRole;
created_at: Date;
updated_at: Date;
}
이제 흥미로운 부분은 이러한 유형을 자동으로 생성하는 방법입니다. 트릭을 수행할 스크립트는 다음과 같습니다.
const { knex } = require("knex");
const { updateTypes } = require("knex-types");
const db = knex(require("./knexfile"));
updateTypes(db, { output: "./types.ts" }).catch(err => {
console.error(err);
process.exit(1);
});
데이터베이스 마이그레이션 워크플로의 일부로 실행합니다.
yarn db:migrate
의 package.json
스크립트에 추가하여 :{
"dependencies": {
"knex": "^0.95.4",
"pg": "^8.6.0"
},
"devDependencies": {
"knex-types": "^0.1.3"
},
"scripts": {
"db:migrate": "knex migrate:latest && node ./update-types"
}
}
완전한 사용 예가 포함된 kriasoft/node-starter-kit을 확인하십시오.
즐거운 코딩!
Reference
이 문제에 관하여(PostgreSQL에서 TypeScript 정의 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/koistya/generate-typescript-definitions-from-postgresql-4i6l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)