这是我的头擦。无法解决这个问题……可能需要对此事重新审视
我有以下代码
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
答案 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
一切都按预期进行。
希望这可以帮助有人遇到类似问题的人