导出的打字稿类的属性和方法不存在(TS 2339)

时间:2018-12-02 09:32:04

标签: javascript typescript types node-modules

我有一个模块,该模块是助手类的集合,每个助手类都在自己的文件中定义:controller.tsstateService.ts,依此类推。从我收集到的全部导出方式来看,是创建一个index.ts,将其全部导入然后导出(用作模块的接口)。

大体上,我的文件看起来像这样:

export default class Controller {
    public state: stateService; // This will become relevant in a moment

    // other things in the class
}

我的index.ts是这些列表:

export { default as Controller } from './controller';

我的tsconfig.json如下:

{
    "compilerOptions": {
        "moduleResolution": "node",
        "noImplicitAny": true,
        "preserveConstEnums": true,
        "outDir": "dist",
        "sourceMap": true,
        "noEmitOnError": true,
        "target": "es6",
        "module": "commonjs",
        "declaration": true,
        "experimentalDecorators": true,
        "suppressImplicitAnyIndexErrors": true
    },
    "include": ["src/**/*"],
    "exclude": ["node_modules", "tests", "src/**/*.spec.ts"],
    "types": ["jest"]
}

现在我有一个示例项目,可以使用npm link在本地测试模块:

export default class OwnerController extends Controller {
    foo() {
        this.state.get(bar);
    }
}

当我尝试在依赖项目中使用Controller类并访问state属性时,出现以下错误:

[ts] Property 'state' does not exist on type 'OwnerController'. [2339]

以几乎相同的方式,类方法也会出现此错误:

[ts] Property 'start' does not exist on type 'CarExampleApp'. [2339]

有人可以建议我做错了什么吗? (谢谢!)

1 个答案:

答案 0 :(得分:0)

我最终发现了问题,@ Aravindan指出,在执行构建后,请确保重新运行npm link只是为了确保它始终处于最新版本。

对我来说,问题在于依赖项目的名称与package.json中依赖的项目相同。