Typescript TS2339属性不存在

时间:2019-09-24 19:23:05

标签: node.js typescript ts-node

这是我的头擦。无法解决这个问题……可能需要对此事重新审视

我有以下代码

import express from 'express';
import { isFunction } from 'lodash';

export class Server {
  private _server = express();
  private _namespace = '/api/v1';
  public constructor(private _port: number) {}

  public addRoute({ path, handler, method }): this {
    var requestHandler = this._server[String(method).toLowerCase()];
    if (false === isFunction(requestHandler)) throw new Error('Invalid HTTP method');
    requestHandler(path, handler);
    return this;
  }
}

我不断遇到同样的错误,对我来说这根本没有道理...

TSError: ⨯ Unable to compile TypeScript:
src/server/main.ts:21:14 - error TS2339: Property '_port' does not exist on type 'Server'.

21         this._port = _port;
                ~~~~~
src/server/main.ts:22:14 - error TS2339: Property '_server' does not exist on type 'Server'.

22         this._server = express_1.default();
                ~~~~~~~
src/server/main.ts:23:14 - error TS2339: Property '_namespace' does not exist on type 'Server'.

23         this._namespace = '/api/v1';
                ~~~~~~~~~~
src/server/main.ts:34:35 - error TS2339: Property '_server' does not exist on type 'Server'.

34         var requestHandler = this._server[String(method).toLowerCase()];
                                     ~~~~~~~

这对我来说简直是疯子...

我正在使用打字稿 3.6.3,并在 node 12.8.1上运行,并使用 ts-node {{ 1}}来支持TS插件

我在TS playground上粘贴了整个代码。进行了一些更改,以删除导入和未定义的函数,但是总体上不会出现上述错误,因此我很感激……如果有人将我指出解决这个问题的方向,那就太好了:)

另外,这是我的8.4.1

tsconfig.json

1 个答案:

答案 0 :(得分:0)

我终于弄明白了发生了什么。有一个线索是,报告的错误一直在报告已经编译的代码中的错误。 Typescript遇到了JS代码...

问题是我使用nodemon启动服务器,然后再次手动要求ts-node。这是我一直在使用的命令

nodemon --ext ts --delay 100ms -r ts-node/register src/app.ts 

在我上一个使用nodemon 1.18.9的项目中很好(甚至是需要)。

但是,当我建立一个新项目时,我已经自动将nodemon升级到了1.19.2版本,并且可以检查in nodemon v1.19.0 release notes了,TS已被添加到默认的exec路径中。因此,一旦nodemon确定您正在运行TS文件,它将更改最后的node命令

FROM

node -r ts-node/register src/app.ts

ts-node -r ts-node/register src/app.ts

这意味着Typescript将运行两次,而第二次将针对已经完成的转码(也就是JS代码)运行。

无论如何,一旦我将启动命令更改为

nodemon --ext ts --delay 100ms src/app.ts 

一切都按预期进行。

希望这可以帮助有人遇到类似问题的人