【发布时间】:2015-05-20 20:17:15
【问题描述】:
对任何不正确的术语表示歉意。对于那些不熟悉 Meteor 的人,it has a well-defined order of script loading。我正在尝试创建许多包含类的 *.ts 文件,就像您在 C# 的 *.cs 文件中看到的那样。我想在彼此之间引用这些*.ts 文件,最终从main.ts 引用。
编译 Car.ts:
class Car {
constructor(public age: number) { }
}
生成 Car.js:
var Car = (function () {
function Car(age) {
this.age = age;
}
return Car;
})();
使用 Meteor,我想要以下输出:
Car = (function () {
function Car(age) {
this.age = age;
}
return Car;
})();
这样就可以从另一个文件 main.ts 中引用 Car:
/// <reference path="car.ts"/>
Meteor.startup(function () {
console.log(Car); // Hopefully prints [Function: Car]
var a: Car = null; // Compiles
});
我可以通过修改 Car.ts 来接近:
declare var Car;
class Car_ {
constructor(public age: number) {}
}
Car = Car_;
但这会产生一个笨拙的输出:
var Car_ = (function () {
function Car_(age) {
this.age = age;
}
return Car_;
})();
Car = Car_;
并且需要一个笨拙的 main.ts:
/// <reference path="car.ts"/>
Meteor.startup(function () {
console.log(Car); // Prints [Function: Car_]
var a: Car_ = new Car(); // Yuck!
});
有什么建议吗?我可能将其视为 C# 应用程序。
【问题讨论】:
-
听起来像是一个 XY 问题... TS 将所有内容都包装在一个 IIFE 中,你不能直接导出
Car吗? -
我不想在所有其他类型的标记下都用下划线弄乱代码库。在上面的代码中,你必须写
var a: Car = new Car_(),这很糟糕。理想情况下,我可以写类似declare var Car = class Car {}。 -
我知道 AMD/CommonJS 模块,但一直在努力寻找也使用 Meteor 的示例代码库(之后,我希望它们同时在客户端和服务器端工作? )。
标签: javascript meteor typescript