繁体   English   中英

续集 ts 错误。 “long”类型的参数不能分配给“TextDataTypeOptions”类型的参数

[英]Sequelize ts error. Argument of type '"long"' is not assignable to parameter of type 'TextDataTypeOptions'

import { Sequelize, DataTypes, Model, BuildOptions } from 'sequelize';

...

client_data: {
    type: DataTypes.TEXT('long'),
    allowNull: false
}

我搜索了所有我能找到的东西,他们说这是对的。

对于"sequelize": "^5.21.3"postgresql ,简短的回答:

它应该是DataTypes.TEXT({ length: 'long' }) ; DataTypes.TEXT()方法的参数接口如下:

data-types.d.ts

export interface TextDataTypeOptions {
  length?: TextLength;
}

长答案,一个完整的工作示例:

index.ts

import { DataTypes, Model } from 'sequelize';
import { sequelize } from '../../db';

class SomeEntity extends Model {}
SomeEntity.init(
  {
    client_data: {
      type: DataTypes.TEXT({ length: 'long' }),
      allowNull: false,
    },
  },
  { sequelize, modelName: 'SomeEntities' },
);

(async function test() {
  try {
    await sequelize.sync({ force: true });
  } catch (error) {
    console.log(error);
  } finally {
    await sequelize.close();
  }
})();

执行上述代码后,使用psql cli 的\\d[S+] NAME查找SomeEntities的信息:

node-sequelize-examples=# \d "SomeEntities"
                             Table "public.SomeEntities"
   Column    |  Type   |                          Modifiers
-------------+---------+-------------------------------------------------------------
 id          | integer | not null default nextval('"SomeEntities_id_seq"'::regclass)
 client_data | text    | not null
Indexes:
    "SomeEntities_pkey" PRIMARY KEY, btree (id)

client_data列的数据类型是client_datatext

执行调试信息:

{ POSTGRES_HOST: '127.0.0.1',
  POSTGRES_PORT: '5430',
  POSTGRES_PASSWORD: 'testpass',
  POSTGRES_USER: 'testuser',
  POSTGRES_DB: 'node-sequelize-examples' }
Executing (default): DROP TABLE IF EXISTS "SomeEntities" CASCADE;
Executing (default): DROP TABLE IF EXISTS "SomeEntities" CASCADE;
(sequelize) Warning: PostgreSQL does not support TEXT with options. Plain `TEXT` will be used instead. 
>> Check: http://www.postgresql.org/docs/9.4/static/datatype.html
Executing (default): CREATE TABLE IF NOT EXISTS "SomeEntities" ("id"   SERIAL , "client_data" TEXT NOT NULL, PRIMARY KEY ("id"));
Executing (default): SELECT i.relname AS name, ix.indisprimary AS primary, ix.indisunique AS unique, ix.indkey AS indkey, array_agg(a.attnum) as column_indexes, array_agg(a.attname) AS column_names, pg_get_indexdef(ix.indexrelid) AS definition FROM pg_class t, pg_class i, pg_index ix, pg_attribute a WHERE t.oid = ix.indrelid AND i.oid = ix.indexrelid AND a.attrelid = t.oid AND t.relkind = 'r' and t.relname = 'SomeEntities' GROUP BY i.relname, ix.indexrelid, ix.indisprimary, ix.indisunique, ix.indkey ORDER BY i.relname;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM