TypeScript编译错误-类型上不存在属性

时间:2019-03-03 21:26:58

标签: typescript

当我尝试编译我的打字稿代码时,出现以下错误:

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出现了第一个问题,以及如何同时解决这两个问题?

谢谢

1 个答案:

答案 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


  1. 这仅与any类型等效,因为尽管我们可以extend Collection,但不能extend any类型。