2016-02-09 2 views
1

У меня есть это пространство именИмпорт «не может найти модуль», когда внутренний модуль имеет импорт объявлен

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.

Почему это произошло? Любые мысли, как исправить?

UPDATE 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 Я думаю, что я просто установил конфигурацию, обернув ее i п к пространству имен:

namespace Common { 
    export class Config { .. } 
} 

Также изменен оператор импорта из этого import {Config} from './config'; к этому: import Config = Common.Config; но до сих пор не понять, как исправить 'express' вещь

ответ

1

Это происходит потому, что с того момента, вы положили на импорт или экспорт заявление верхнего уровня в файл, этот файл обрабатывается как сам внешний модуль. Если вы используете внутренние модули (пространства имен), я предлагаю импортировать внутри пространств имен, так что нет заявлений на импорт или экспорт верхнего уровня.

namespace Validation { 
    import Request = ...; 
    import Response = ...; 

    export function Func1() { 
    // code 
    } 

    export function Func2() { 
     // code 
    }  
} 

Другой подход заключается в использовании внешних модулей вместо этого, но это требует, чтобы система загрузки модуля, который может быть излишним во многих случаях.

Прямо сейчас вы смешиваете внутренние и внешние модули, что не рекомендуется. Что касается сложных структурных случаев, подобных этому, TypScript все еще очень далек от того, чтобы быть зрелым языком.

+0

Да, я пробовал это, но в случае импорта импортирует {Request, Response} из 'express'; '' import {Config} из './../ config'; 'Я получаю сообщение об ошибке' Импорт объявления в пространстве имен не может быть импортирован модуль – sreginogemoh

+1

@sreginogemoh Это потому, что вы пытаетесь импортировать внешний модуль во внутреннюю систему (пространство имен). Вот почему смешивание двух является плохим подходом. –

+0

Да, я вижу, но есть ли другие способы импортировать модуль «npm' во внутренний модуль? Что мне делать в таком случае? – sreginogemoh

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

Смежные вопросы