使用TypeScript的Nodej会产生奇怪的错误

时间:2015-05-05 23:43:56

标签: node.js npm typescript visual-studio-code

我正在使用TypeScript 1.5.0-beta,我正在使用Visual Studio Code创建一个简单的节点服务器,使用Anders Hejlsberg在构建时显示的示例。

///<reference path="typings/node/node.d.ts"/>

import { createServer } from "http"

export function simpleServer(port: number, message: string)
{
  createServer((req, res) =>
  {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');
  }).listen(port, '127.0.0.1');

  console.log('Server running at http://127.0.0.1:1337/');
}

我有三个问题

1)使用此代码,每当我尝试使用Visual Studio代码或命令$ tsc server -m commonjs构建ts文件时,它会不断给出类似这些的奇怪错误

error TS1008: Unexpected token; 'module
, class, interface, enum, import or statement' expected

2)它还尝试构建我引用的node.d.ts文件,并提供额外的“:”预期错误消息。

3)这更像是一个Visual Studio Code问题。我们如何让VS Code在项目/文件夹中构建所有ts文件并生成js文件。 我按照VS Code的typescript设置的说明,但我仍然需要单独构建每个ts文件以生成js代码。

我知道grunt是一种方法,但据我所知VS Code应该能够在像Visual Studio这样的文件夹中构建所有ts文件。如果我错了,请纠正我。

感谢。

3 个答案:

答案 0 :(得分:3)

好的,我终于能够弄清楚发生了什么。由于我安装了Visual Studio 2013和TypeScript 1.4,因此它在C:/ Program Files(x86)/ Microsft SDKs / TypeScript / 1.0下创建了文件。所以,每次我使用tsc命令时,它总是默认为版本1.0.3.0,它适用于TypeScript 1.4而不是1.5.0-beta。当我通过节点安装TypeScript 1.5.0-beta时,它在C:\ Users \ Krishna V \ AppData \ Roaming \ npm \ tsc

下为新版本创建了文件

因此,对于#1来修复编译版本问题,我更改了task.json文件以使用命令和windows选项的完整路径。所以,它看起来像这样

{
    "version": "0.1.0",

    // The command is tsc.
    "command": "C:\\Users\\Krishna^ V\\AppData\\Roaming\\npm\\tsc",

    // Show the output window only if unrecognized errors occur. 
    "showOutput": "silent",

    // Under windows use tsc.exe. This ensures we don't need a shell.
    "windows": {
        "command": "C:\\Users\\Krishna^ V\\AppData\\Roaming\\npm\\tsc"
    },

    // args is the HelloWorld program to compile.
    "args": [],

    "isShellCommand": true,

    // use the standard tsc problem matcher to find compile problems
    // in the output.
    "problemMatcher": "$tsc"
}

对于#2,看起来它是Node.d.ts与TypeScript 1.5.0-beta不同步的已知问题,并且已经在git中为此启用了react.d.ts类似的问题。

对于#3,tsconfig.json仅适用于TypeScript版本1.5.0-beta,并且因为tsc使用了错误的版本,所以它从不使用tsconfig。现在它使用正确的版本,它使用tsconfig,因此它构建了tsconfig中提到的所有文件。例如,这些中的任何一个(一个具有ES5和ES6)

{
    "compilerOptions": {
        "target": "ES5",
        "module": "commonjs",
        "sourceMap": true,
        "removeComments": true
    },
    "files": [
        "server.ts","config.ts","models/user.ts"
    ]
}

OR 

{
    "compilerOptions": {
        "target": "ES6",
        "sourceMap": true,
        "removeComments": true
    },
    "filesGlob": [
        "./**/*.ts"
    ]
}

在这种情况下,它将编译第一个选项中提到的三个文件或选项2中的所有ts文件。

答案 1 :(得分:0)

我无法帮助你#3,因为我还没有尝试过VS Code。但是,在#1和#2上,您需要做几件事:

A。)在Typescript编译器上启用CommonJS模块类型。在Visual Studio中,您可以通过转到Project - &gt;来完成此操作。属性 - &gt; Typescript构建,并更改&#34;模块系统&#34;到&#34; CommonJS&#34;。在命令提示符下,您可以通过传入参数&#34; -module commonjs&#34;到tsc.exe。对不起,我不知道如何在VS Code中实现这一点。

B。)我认为示例代码看起来应该是这样的。我不确定Anders是否可能会在会议上预览未来的语法,但以下内容适合您:

///<reference path="typings/node/node.d.ts"/>

import Http = require('http')

export function simpleServer(port: number, message: string)
{
    Http.createServer((req, res) =>
    {
        res.writeHead(200, { 'Content-Type': 'text/plain' });
        res.end('Hello World\n');
    }).listen(port, '127.0.0.1');

    console.log('Server running at http://127.0.0.1:1337/');
}

答案 2 :(得分:0)

  

1 - 模块错误

当您转到

下方#3下的tsconfig.json时,这将解决
  

2 - 参考错误:

引用的语法应为

import http = require('http');
  

3 - 自动将ts文件编译为js

  1. 使用您的设置配置tsconfig.json文件
  2. (可选)在Visual Studio代码中启用自动保存功能
  3. 在Visual Studio代码中配置任务
  4. 使用TypeScript编译器中的监视功能
  5. 这是tsconfig.json

    {
        "compilerOptions": {
            "module": "commonjs",
            "noImplicitAny": false,
            "removeComments": true,
            "preserveConstEnums": true,
            "target": "ES5",
            "sourceMap": true,
            "outDir": "../dist"
        }
    }
    

    这是一个已定义的任务.settings / tasks.json --p指定您要通过tsconfig.json进行编译 --w指定要在保存文件时重新编译 您可以参考编译器选项here

    {
        "version": "0.1.0",
        // The command is tsc.
        "command": "tsc",
        // Show the output window only if unrecognized errors occur. 
        "showOutput": "silent",
        // Under windows use tsc.exe. This ensures we don't need a shell.
        "windows": {
            "command": "tsc.exe"
        },
        // args is the HelloWorld program to compile.
        "args": ["--p", "./PATH-TO-TSCONFIG-FOLDER", "--w"],
        // use the standard tsc problem matcher to find compile problems
        // in the output.
        "problemMatcher": "$tsc"
    }
    

    Node + TypeScript =太棒了!