節點不喜歡在TypeScript正在生成的JavaScript中的東西,我不明白爲什麼。下面是代碼Typescript生成JavaScript不起作用
Person.ts:
export module Models {
export class Person {
id: number;
firstName: string;
lastName: string;
constructor(f: string, l: string) {
this.firstName = f;
this.lastName = l;
}
public saySomething(): void {
console.log("my name is %s %s", this.firstName, this.lastName);
}
}
}
Database.ts:
import P = module("Person");
export module Database {
export class DB {
public findPerson(id: number): P.Models.Person {
return new P.Models.Person("a", "b");
}
}
}
Test.ts:
var D = require("./DB");
var db = new D.Database.DB();
var p = db.findPerson(123);
p.saySomething();
它編譯罰款倒在Javascript,但有似乎是正在創建的DB.js文件有問題。當我嘗試在節點中運行Test.js時,得到:
$node Test.js
DB.js:2
(function (Database) {
^
TypeError: object is not a function
at Object.<anonymous> (DB.js:2:1)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:362:17)
at require (module.js:378:17)
at Object.<anonymous> (Test.js:1:73)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
在導入DB.js期間發生這種情況。奇怪的是,如果我改變findPerson()方法返回一個字符串,而不是一個人,它工作正常。它與創建Person對象有關。
這裏是JavaScript:
(function (Models) {
var Person = (function() {
function Person(f, l) {
this.firstName = f;
this.lastName = l;
}
Person.prototype.saySomething = function() {
console.log("my name is %s %s", this.firstName, this.lastName);
};
return Person;
})();
Models.Person = Person;
})(exports.Models || (exports.Models = {}));
var P = require("./Person")
(function (Database) {
var DB = (function() {
function DB() { }
DB.prototype.findPerson = function (id) {
return new P.Models.Person("a", "b");
};
return DB;
})();
Database.DB = DB;
})(exports.Database || (exports.Database = {}));
var dbx = require("./DB")
var db1 = new dbx.Database.DB();
var p = db1.findPerson(123);
p.saySomething();
哇,你是絕對正確的。 DB.js文件中缺少的分號是導致問題的原因。我想我應該向微軟提交一個錯誤。 – d512
看起來像某人已經做了;只是把它投票:http://typescript.codeplex.com/workitem/364 –
或者,也許這就是你,哈哈......剛注意到這個答案是從十一月。 –