我有这个命名空间
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包
UPDATE 2我想我只是通过将它封装到名称空间来修正它:
namespace Common {
export class Config { .. }
}还将导入语句从这个import {Config} from './config';改为:import Config = Common.Config;,但还没有弄清楚如何修复'express'
发布于 2016-02-10 09:42:33
这是因为从将顶级导入或导出语句放入文件的那一刻起,该文件就被视为外部模块本身。如果您正在使用内部模块(名称空间),我建议在名称空间中导入,这样就没有顶级的导入或导出语句。
namespace Validation {
import Request = ...;
import Response = ...;
export function Func1() {
// code
}
export function Func2() {
// code
}
}另一种方法是使用外部模块,但这需要一个模块加载系统,这在许多情况下可能是多余的。
现在,您正在混合内部和外部模块,这是不建议的。对于这种复杂的结构情况,打字本还远远不是一种成熟的语言。
发布于 2016-02-09 12:12:52
https://stackoverflow.com/questions/35290579
复制相似问题