当我尝试编译我的打字稿代码时,出现以下错误:
src/Project/ProjectCollection.ts:6:13 - error TS2339: Property 'add' does not exist on type 'BaseCollection'.
我已将以下代码作为演示随附:
ProjectCollection.ts
export default class ProjectCollection extends BaseCollection {
addProject(project: Project) {
super.add(project)
}
}
BaseCollection.ts
// @ts-ignore
import Collection from 'collectionsjs';
export default abstract class BaseCollection extends Collection {
public all() {
return super.all();
}
}
我正在github上使用以下库进行收集:(https://github.com/logaretm/collectionsjs)
如果我从以下位置换行:
import Collection from 'collectionsjs'
收件人:
const Collection = require('collectionsjs')
然后上述错误不再发生,但是在运行tslint(https://palantir.github.io/tslint/)时出现此错误:
ERROR: src/BaseCollection.ts:1:20 - require statement not part of an import statement
只是想知道是否有人可以解释为什么使用import出现了第一个问题,以及如何同时解决这两个问题?
谢谢
答案 0 :(得分:0)
只是想知道是否有人可以解释为什么使用import出现了第一个问题,以及如何同时解决这两个问题?
发生第一个问题是因为collectionsjs
模块没有TypeScript声明文件。结果,TypeScript编译器没有有关Collection
类型的任何信息。即使在运行时Collection
具有特定的接口,对于编译器,Collection
类型在某种程度上 1 等效于此:
const Collection: any = {};
解决问题的方法是为collectionsjs
模块添加类型声明,并创建一个描述程序包导出内容的类型。
以下是该类型声明文件的开头:
collectionsjs.d.ts
declare module 'collectionsjs' {
export default class Collection {
add(item);
all();
}
}
要完成工作,请添加每个公共成员of the Collection
class。
any
类型等效,因为尽管我们可以extend
Collection
,但不能extend
any
类型。