我有这个命名空间
namespace Validation {
export function Func1() {
// code
}
export function Func2() {
// code
}
}
我可以在app.ts
中导入:
import Validations = Validation;
但是当我想在我的Validation
命名空间
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
:
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
只是一个简单的类:
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 package
更新2 我想我只是通过将其包装到命名空间来修复配置:
namespace Common {
export class Config { .. }
}
还将此import {Config} from './config';
的导入声明更改为:import Config = Common.Config;
但尚未弄清楚如何修复'express'
事物
答案 0 :(得分:1)
这是因为从您将顶级导入或导出语句放入文件的那一刻起,该文件就被视为外部模块本身。如果您正在使用内部模块(名称空间),我建议在名称空间内导入,这样就没有顶级导入或导出语句。
namespace Validation {
import Request = ...;
import Response = ...;
export function Func1() {
// code
}
export function Func2() {
// code
}
}
另一种方法是使用外部模块,但这需要一个模块加载系统,在许多情况下这可能是多余的。
目前,您正在混合使用内部和外部模块,这是不推荐的。对于像这样的复杂结构案例,Typescript仍然远不是一种成熟的语言。
答案 1 :(得分:0)
我假设您已在单独的(来自app.ts)文件中定义了验证功能。如果是这种情况,那么您需要做的是:
在您的Validation.ts中:
export function Func1() {
// code
}
export function Func2() {
// code
}
在你的app.ts中:
import * as Validation from './Validation';
Validation.Func1();
您的问题很可能是将打字稿中的模块和命名空间的概念混合在一起。看看这里:Namespaces and Modules,请务必仔细查看Modules和Namespaces