【发布时间】:2017-07-12 14:50:26
【问题描述】:
我在 TypeScript 中有以下示例类:
export default class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
使用以下 tsconfig.json:
{
"compilerOptions": {
"module": "umd",
"target": "es5",
"noImplicitAny": true,
"removeComments": false,
"preserveConstEnums": true,
"suppressImplicitAnyIndexErrors": true
},
"files" :[
"example.ts"
]
}
使用转译器,它会生成以下 JavaScript:
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var Greeter = (function () {
function Greeter(message) {
this.greeting = message;
}
Greeter.prototype.greet = function () {
return "Hello, " + this.greeting;
};
return Greeter;
}());
exports.Greeter = Greeter;
});
我已经用不同的模块(umd,commonjs)测试了很多东西,但是我无法使该类在 Node.js 和浏览器中同时使用相同的代码(使用 require 可以工作使用 Angular、React 和在浏览器的 Window 对象中)。我正在尝试实现以下目标:
// With Node.js, Angular, React etc
let Greeter = require("Greeter");
let instanceGreeter = new Greeter("My Name");
instanceGreeter.greet();
// And that works in the browser too with the same codebase
var instanceGreeter = new Greeter("My Browser Name");
instanceGreeter.greet();
这是否可以通过遵循任何标准或者我必须用我自己的代码导出它(不使用模块选项)?
【问题讨论】:
标签: typescript