导出 Dynamoose Typescript 模型

Exporting a Dynamoose Typescript model

  1. dynamoose 库提供了以下用于构建模型的签名:
    model: {
        <T extends Document>(name: string, schema?: SchemaDefinition | Schema, options?: Partial<import("./Model").ModelOptions>): T & Model<T> & ModelDocumentConstructor<T>;
        defaults: any;
    };
  1. TypeScript 文件中的消费如下:
import * as dynamoose from 'dynamoose';
...
const ExampleRepository = dynamoose.model(
  schemaName,
  ExampleSchema,
);

export default ExampleRepository;
  1. 编译产生错误:
Exported variable 'ExampleRepository' has or is using name 'ModelDocumentConstructor' from external module ".../node_modules/dynamoose/dist/index" but cannot be named.

关于 SO 的类似问题的其他答案建议应该导入 ModelDocumentConstructor

但是接口本身没有导出,所以不能导入。

由于 ModelDocumentConstructor 未导出,我已实施以下解决方案作为解决方法。创建第二个要导出的包装器对象,其中包含您需要的方法。

例如:

const Model = dynamoose.model('MyObj', Schema, {
  create: false,
  update: false,
});

async function add(obj: {}) {  
  try {
    await Model.create(obj);
  } catch (e) {
    console.error(e);
  }
}

async function findMany(obj: { [key: string]: any }) {  
  try {
    return await Model.batchGet(obj);
  } catch (e) {
    console.error(e);
  } 
}

...

export const myObjDb = {
  find,
  findMany,
  add,
  remove,
  update,
  updateMany,
};

根据文档,它说 typescript 支持处于测试阶段,但 npm install --save "dynamoose@beta" 不起作用。

最新版本是否已经支持打字稿,或者非常有限。

如果在 tsconfig.json 文件中设置了 "declaration": true 选项,就会出现此问题。如果项目不需要它,将其禁用将解决问题。

我已经在 dynamoose 存储库中填写了错误报告,希望它会在下一个版本中得到修复。