在typescript中导入接口时出错

时间:2017-01-08 19:46:54

标签: typescript import importerror

我遇到了在Typescript(2.1.4)中导入接口的问题。

这是我的界面

// src/cache.model.ts
import * as ng from 'angular';

module angularjsIndexedDB {

    export interface Cache {
        get<T>(key : string): ng.IPromise<T>;
        getOrCreate<T>(key : string, fetcher: () => ng.IPromise<T>): ng.IPromise<T>;
        put<T>(key : string, value: T): ng.IPromise<void>;
        updateChecksum(serverModelChecksum: number): ng.IPromise<void>;
    }

}

这是实现接口的同一模块中的类。

// src/indexeddb-store.service.ts
module angularjsIndexedDB {

    export class IndexedDBStore implements Cache {
        // (... code implementing the interface ...)
    }

}

即使接口在同一个TS模块中,我也会收到错误TS2304:Cannot find name 'Cache'.

如果我将实现更改为具有直接引用

// src/indexeddb-store.service.ts
module angularjsIndexedDB {

    export class IndexedDBStore implements angularjsIndexedDB.Cache {
        // (... code implementing the interface ...)
    }

}

错误变为TS2694:Namespace 'angularjsIndexedDB' has no exported member 'Cache'.即使界面已明确导出。

我尝试过添加

之类的其他内容
import { Cache } from "./cache.model";

import { angularjsIndexedDB.Cache } from "./cache.model";

但这些也是空的。

奇怪的是,之前我没有使用此代码的问题。有没有我忽略的东西?

修改

这是我的tsconfig.json。我做了一些测试,我相信有一个不同的问题导致出现错误的错误。我将重新构建组件以尝试识别问题。

// tsconfig.json
{
  "compilerOptions": {
    "target": "es5",
    "module": "amd",
    "moduleResolution": "node",
    "sourceMap": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "noImplicitAny": false,
    "suppressImplicitAnyIndexErrors": true,
    "outFile": "release/index.js"
  }
}

EDIT2: 我发现了这个问题的“原因”。 cache.model.ts文件在第一行使用import * as ng from 'angular';语句。我最初添加了这一行,因为TS无法解析我文件中的ng.个对象。错误报告中必定存在导致此混淆的错误。

1 个答案:

答案 0 :(得分:0)

我没有得到同样的错误。这是我的代码:

cache.model.ts:

module angularjsIndexedDB {

    export interface Cache {
    }

}

索引资料-store.service.ts:

module angularjsIndexedDB {

    export class IndexedDBStore implements Cache {
        // (... code implementing the interface ...)
    }

}

我按照这样编译:

TSC

使用tsc v2.1.4并且没有错误。

以下是可能性:

  1. 某些编译器选项导致了此问题。
  2. 您不知道编译cache.model.ts文件。
  3. 您向我展示的代码不完整。
  4. 您可以尝试我上面的设置,看看它是否适合您?