Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Module 有没有办法对声明的TypeScript模块使用静态类型?_Module_Typescript_Definitelytyped - Fatal编程技术网

Module 有没有办法对声明的TypeScript模块使用静态类型?

Module 有没有办法对声明的TypeScript模块使用静态类型?,module,typescript,definitelytyped,Module,Typescript,Definitelytyped,我有一个用于node.js的小TypeScript应用程序,需要连接到MongoDB: module Engine { export class EngineCore { public launch() { var mongo = require('mongodb'); var client = mongo.MongoClient; client.connect('mongo

我有一个用于node.js的小TypeScript应用程序,需要连接到MongoDB:

module Engine
{
    export class EngineCore
    {
        public launch()
        {
            var mongo = require('mongodb');
            var client = mongo.MongoClient;

            client.connect('mongodb://localhost:27017/', (error, db) => {this.onDBConnect(db)});
        }

        private onDBConnect(db)
        {
        }
    }
}
现在,我知道我在connect回调上得到了一个
Db
类,但我无法找到将
Db
参数显式键入
Db
类的方法。我正在为
mongodb
使用一个DefinitelyTyped定义文件,它是这样的:

declare module "mongodb" {

    export class MongoClient {
        constructor(serverConfig: any, options: any);

        static connect(uri: string, options: any, callback: (err: Error, db: Db) => void): void;
        static connect(uri: string, callback: (err: Error, db: Db) => void): void;
    }

    export class Db {
        constructor (databaseName: string, serverConfig: Server, dbOptions?: DbCreateOptions);
        [...]
    }
}
module Engine
{
    import MongoDB = require('mongodb');
    [...]
}
我尝试过这样导入它:

declare module "mongodb" {

    export class MongoClient {
        constructor(serverConfig: any, options: any);

        static connect(uri: string, options: any, callback: (err: Error, db: Db) => void): void;
        static connect(uri: string, callback: (err: Error, db: Db) => void): void;
    }

    export class Db {
        constructor (databaseName: string, serverConfig: Server, dbOptions?: DbCreateOptions);
        [...]
    }
}
module Engine
{
    import MongoDB = require('mongodb');
    [...]
}
但我得到了以下错误:

error TS2136: Import declarations in an internal module cannot reference an external module.

是否有任何方法可以使用
Db
类从模块外部显式输入?

您是否尝试过这样重新定位导入?下面的代码为我编译并运行

import mongo = require('mongodb');


 module Engine
{
    export class EngineCore
    {
        public launch()
        {
            var client = mongo.MongoClient;

            client.connect('mongodb://localhost:27017/', (error, db) => {

                    this.onDBConnect(db);
                });
        }

        private onDBConnect(db:mongo.Db)
        {
            console.log("connected");
        }
    }

}

var x = new Engine.EngineCore();
x.launch();

这是做这件事的方法。原因:TypeScript很有帮助,它告诉您需要什么类型的codegen来支持
amd/commonjs
和相同的代码库。感谢您的回答,当我从主文件导入时,它可以工作,但我忘了提到我使用
引擎作为内部模块。我发现了更多关于外部/内部模块的信息,似乎我无法将它们混合在一起。我编辑了
mongodb.d.ts
,使其看起来像一个内部模块。我还没有名称空间冲突,它会编译并运行,所以我会坚持一段时间。