2

最小限のサーバーを Coffeescript から Typescript に変換したいと考えています。元のコードは次のとおりです。

express = require("express")
app=express()
app.use(express.static(__dirname))
app.set("views", __dirname + "/views")
app.set("view engine", "jade")
app.get("/", (req,res)->
        res.render "index")
port = process.env.PORT or 5000
server=app.listen(port)

io=require("socket.io").listen(server)
io.sockets.on("connection", (socket)->socket.emit("news", "data"))

Typescriptバージョンは次のとおりです。

/// <reference path="d.ts/node.d.ts"/>
/// <reference path="d.ts/socket.io.d.ts"/>
/// <reference path="d.ts/express3.d.ts"/>

import express3 = module("express3");
var express = require("express");
var app = express();
app.use(express.static(__dirname));
app.set("views", __dirname+"/views");
app.set("view engine", "jade");

app.get("/", (req, res) => { res.render("index"); });

var port = 5000;
var server=app.listen(port);

import socketio = module("socket.io");
var io=socketio.listen(app);
io.sockets.on("connection", (socket) => { socket.emit("news", "data"); });

どちらのバージョンも問題なく server.js にコンパイルされます。生成されたコードのスタイルは異なりますが、私が見る限り、セマンティクスは同じはずです。Pastebin で 2 つの出力ファイルを確認できます。

コーヒースクリプト: http://pastebin.com/38LZhcPZ

タイプスクリプト: http://pastebin.com/95ABVsB2

応答 "index.jade" には、RaphaelJs との小さな未完成のゲームが含まれています。ここで問題です。coffeescript で生成された server.js を起動して localhost:5000 を開くと、すべて問題ありません。ゲームの実行が開始されます。

しかし、コンパイルされた typescript バージョンを実行すると、ゲームは開始されません。localhost:5000 を開いても問題ありません。Web サイトはエラーなしで提供され、ページのソースを調べるとすべて表示されます。最初は、express の静的ファイル サーバーが機能しないのではないかと考えました。しかし<script src="../scripts/game.js"/>、ページのソースをクリックすると、コードが表示されます。ゲーム ロジックは window.onload で開始されます。問題があるのか​​もしれませんが、それはかなり奇妙に思えます。

私に何ができる ?

4

2 に答える 2

6

一見すると、同じコードではないようです。

オリジナルとCoffeeScript生成:

io = require("socket.io").listen(server);

ただし、TypeScript コードには次のものがあります。

var io = socketio.listen(app);

TypeScript コードを次のように変更すると、動作するはずです。

var io = socketio.listen(server);
于 2012-12-31T14:28:18.910 に答える
2

socketio.listen() への呼び出しは、CoffeeScript の例ではappを渡していますが、TypeScript の例ではserverを渡しています。

var io = socketio.listen(app);

io = require("socket.io").listen(server);
于 2012-12-31T14:30:44.123 に答える