使用相对路径解决导入失败

时间:2016-06-25 11:03:45

标签: angular typescript1.8 angular-cli

我有以下文件夹结构:

enter image description here

我尝试在language.component.ts中导入language-event-subscriber是

import {LanguageEventSubscriber} from './language-event-subscriber'

但是,虽然该类似乎在IDE中已解决,但在运行时未找到该类作为未能打印其日志语句的证据。

但是,以下工作:

import './language-event-subscriber'

然而,在同一文件夹中,以下解析并在运行时工作

import {EventSubscriber, On} from "event-dispatch";
import {Language} from './language.model'

@EventSubscriber()
export class LanguageEventSubscriber {
    @On('onValidLanguage')
    onValidLanguage(language: Language) {
        console.log(language);
    }

    @On('onInvalidLanguage')
    onInvalidLanguage(status: string) {
        console.log("New status: ");
    }
}

为什么会出现这种不一致的情况?

由于

1 个答案:

答案 0 :(得分:0)

基于event-dispatch package的文档,即使您的定义中有export class LanguageEventSubscriber,这实际上并不是一个意图导入和使用与其他模块相同的类。如果您以更常见的方式执行此操作,则使用您的模块的代码将类似于:

// This is NOT the way to use this package
import  {LanguageEventSubscriber} from './language-event-subscriber';

let les = new LanguageEventSubscriber();
// ... respond to events using your variable ...

但是,这不是如何使用此包。由于类定义中的@EventSubscriber()装饰器,您的事件处理程序可用于EventDispatcher类型的对象,并且使用如下:

import {EventDispatcher} from "event-dispatch";
import "./language-event-subscriber";

let ed = new EventDispatcher();
ed.dispatch("onInvalidLanguage", "Sorry. That language is unavailable.");
// ... etc. ...

根据the Typescript documentation,我猜你必须以这种方式导入你的模块是因为它被视为副作用,在“仅为副作用导入模块”一节中描述

我认为这不一定是不一致的,但event-dispatch包可能是以非标准方式编码的。它似乎是一个包含少量下载的相对较新的软件包,所以这是纯粹的推测,但它可能只是包的开发人员不知道或选择不遵循Typescript的标准习惯用法。