我正在使用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文件。如果我错了,请纠正我。
感谢。
答案 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
这是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 =太棒了!