2
  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应该导入。TS4023:导出的变量 <x> 具有或正在使用来自外部模块的名称 <y>,但无法命名

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

4

3 回答 3

2

由于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,
};

于 2020-05-29T20:59:24.123 回答
0

从文档中,它说打字稿支持处于测试阶段,但 npm install --save "dynamoose@beta" 不起作用。

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

于 2020-06-02T03:41:39.717 回答
0

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

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

于 2020-06-18T08:51:52.287 回答