首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当内部模块已声明导入时,导入“找不到模块”

当内部模块已声明导入时,导入“找不到模块”
EN

Stack Overflow用户
提问于 2016-02-09 11:14:39
回答 2查看 1.9K关注 0票数 1

我有这个命名空间

代码语言:javascript
复制
namespace Validation {

    export function Func1() {
    // code
    }

    export function Func2() {
        // code
    }    
}

我可以在我的app.ts中导入

代码语言:javascript
复制
import Validations = Validation;

但是当我想引用Validation命名空间中的某些模块时

代码语言:javascript
复制
import {Request, Response} from 'express';
var jwt    = require('jsonwebtoken');
var express = require('express');
import {Config} from './../config';

namespace Validation {

    export function Func1() {
    // code
    }

    export function Func2() {
        // code
    }    
}

所以import Validations = Validation;在我的app.ts中给了我一个错误cannot find namespace Validation

为什么会发生这种事?有什么想法怎么解决吗?

更新1:如果我将导入放在名称空间后面,我将得到一个错误Import declaration in a namespace cannot import a module

代码语言:javascript
复制
 namespace Validation {

import {Request, Response} from 'express'; //Error: Import declaration in a namespace cannot import a module
var jwt    = require('jsonwebtoken');
var express = require('express');
import {Config} from './../config'; //Error: Import declaration in a namespace cannot import a module

    export function Func1() {
    // code
    }

    export function Func2() {
        // code
    }    
}

我的config.ts只是一个简单的类:

代码语言:javascript
复制
export class Config {
        public static get Secret():string { return 'stuff'; }
        public static get Database():string { return 'mongodb://127.0.0.1:27019/test'; }
    }

'express',这是一个npm包

UPDATE 2我想我只是通过将它封装到名称空间来修正它:

代码语言:javascript
复制
namespace Common {
    export class Config { .. }
}

还将导入语句从这个import {Config} from './config';改为:import Config = Common.Config;,但还没有弄清楚如何修复'express'

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-10 09:42:33

这是因为从将顶级导入或导出语句放入文件的那一刻起,该文件就被视为外部模块本身。如果您正在使用内部模块(名称空间),我建议在名称空间中导入,这样就没有顶级的导入或导出语句。

代码语言:javascript
复制
namespace Validation {
    import Request = ...;
    import Response = ...;

    export function Func1() {
    // code
    }

    export function Func2() {
        // code
    }    
}

另一种方法是使用外部模块,但这需要一个模块加载系统,这在许多情况下可能是多余的。

现在,您正在混合内部和外部模块,这是不建议的。对于这种复杂的结构情况,打字本还远远不是一种成熟的语言。

票数 1
EN

Stack Overflow用户

发布于 2016-02-09 12:12:52

我假设您已经在独立(与app.ts)文件中定义了验证函数。如果是这样的话,那么您需要做的是:

在Validation.ts中:

代码语言:javascript
复制
export function Func1() {
// code
}

export function Func2() {
    // code
} 

在app.ts中:

代码语言:javascript
复制
import * as Validation from './Validation';

Validation.Func1();

您的问题很可能是在类型记录中将模块和命名空间的概念混合在一起。在这里看一看:命名空间和模块,并确保通过模块命名空间查看

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35290579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档