porsager/postgres

TypeScript introspection, add more custom types?

Open

#661 opened on 2023年8月17日

GitHub で見る
 (0 comments) (4 reactions) (0 assignees)JavaScript (230 forks)batch import
Typescripthelp wanted

Repository metrics

Stars
 (6,221 stars)
PR merge metrics
 (30d に merged PR はありません)

説明

I'm not sure if this is something that is lacking in the typescript definition. When I create a postgresql instance in typescript such as:

import postgres from 'postgres';

const sql = postgres({
  host                 : awsSecret.host,
  port                 : awsSecret.port,
  database             : awsSecret.dbname,
  username             : awsSecret.username,
  password             : awsSecret.password
});

If I console.log the sql object I get a lot of property of the sql such as

  console.log
    [Function: sql] {
      types: [Function: typed],
      typed: [Function: typed],
      unsafe: [Function: unsafe],
      array: [Function: array],
      json: [Function: json],
      file: [Function: file],
      parameters: {},
      largeObject: [Function: bound largeObject],
      PostgresError: [class PostgresError extends Error],
      options: {
        host: [ 'xxxxxxxxxx' ],
        port: [ xxxxxx ],
        path: false,
        database: 'xxxxx',
        user: 'xxxxxxx',
        pass: 'xxxxxxxxxx',
        max: 10,
        ssl: false,
        idle_timeout: null,
        connect_timeout: 30,
        max_lifetime: [Function: max_lifetime],
        max_pipeline: 100,
        backoff: [Function: backoff],
        keep_alive: 60,
        prepare: true,
        debug: false,
        fetch_types: true,
        publications: 'alltables',
        target_session_attrs: undefined,
        connection: { application_name: 'postgres.js' },
        types: {},
        onnotice: undefined,
        onnotify: undefined,
        onclose: undefined,
        onparameter: undefined,
        socket: undefined,
        transform: {
          undefined: undefined,
          column: [Object],
          value: [Object],
          row: [Object]
        },
        parameters: {},
        shared: { retries: 0, typeArrayMap: {} },
        serializers: {
          '0': [Function: serialize],
          '16': [Function: serialize],
          '17': [Function: serialize],
          '21': [Function: serialize],
          '23': [Function: serialize],
          '25': [Function: serialize],
          '26': [Function: serialize],
          '114': [Function: serialize],
          '700': [Function: serialize],
          '701': [Function: serialize],
          '1082': [Function: serialize],
          '1114': [Function: serialize],
          '1184': [Function: serialize],
          '3802': [Function: serialize]
        },
        parsers: {
          '16': [Function: parse],
          '17': [Function: parse],
          '21': [Function: parse],
          '23': [Function: parse],
          '26': [Function: parse],
          '114': [Function: parse],
          '700': [Function: parse],
          '701': [Function: parse],
          '1082': [Function: parse],
          '1114': [Function: parse],
          '1184': [Function: parse],
          '3802': [Function: parse]
        }
      },
      listen: [AsyncFunction: listen],
      notify: [AsyncFunction: notify],
      begin: [AsyncFunction: begin],
      close: [AsyncFunction: close],
      end: [AsyncFunction: end]
    }

But not all these properties are available in typescript. Using keys of the sql instance only get the following properties:

 'length',
      'name',
      'arguments',
      'caller',
      'constructor',
      'apply',
      'bind',
      'call',
      'toString',
      Symbol(Symbol.hasInstance),
      '__defineGetter__',
      '__defineSetter__',
      'hasOwnProperty',
      '__lookupGetter__',
      '__lookupSetter__',
      'isPrototypeOf',
      'propertyIsEnumerable',
      'valueOf',
      '__proto__',
      'toLocaleString'

And VS Code also complains when I try to access sql.options. Is this because not all properties are exported in the type definition?

Is there a way in typescript to verify the integrity of the sql instance? Or is there a recommended way to do unit test in typescript for this lib?

コントリビューターガイド