代码之家  ›  专栏  ›  技术社区  ›  Picci

Typescript推断问题-导出函数的返回类型具有或正在使用名称。。。但无法命名

  •  1
  • Picci  · 技术社区  · 7 年前

    我想创建一个函数来转换基于承诺的函数,在我的示例中 mongodb节点客户端 ,变成可观察的。

    代码非常简单

    export function updateOneObs(filter: Object, object: Object, collection: Collection<any>) {
        return Observable.fromPromise(collection.updateOne(filter, object));
    }
    

    如果我把它放在VSCode中,我会收到一条错误消息,上面写着

    “导出函数的返回类型具有或正在使用外部模块中的名称‘UpdateWriteoPreult’”/npm包/可观察的mongo/node\u模块/@类型/mongodb/索引“但无法命名”

    为了解决这个问题,我需要通过

    import {UpdateWriteOpResult} from 'mongodb';

    考虑到错误消息清楚地表明Typescript知道在哪里查找丢失的类型,有没有一种方法可以在不显式导入的情况下通过推理解决问题?

    在我的例子中,导入还有一个小缺点:因为我已经用 "noUnusedLocals": true ,一旦导入丢失的类型,如果我想避免另一个错误,就必须在某处使用它。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Titian Cernicova-Dragomir    7 年前

    只有在 "declaration": true, 。如果不需要声明,可以禁用此选项。如果确实需要声明,则必须为类型创建本地名称。要生成声明,typescript需要为返回类型使用本地名称。编译器知道原始类型所在的位置(正如它在错误中指出的那样),但要生成声明,它必须在模块中为该类型指定一个别名,而这是设计所不能做到的(编译器不负责为类型命名,尤其是当可能与文件中的其他名称冲突时)