我遇到了在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.
个对象。错误报告中必定存在导致此混淆的错误。
答案 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并且没有错误。
以下是可能性:
cache.model.ts
文件。您可以尝试我上面的设置,看看它是否适合您?