Javascript Babel不再对Typescript 1.8应用“InteroPrequiredFault”
我刚刚将我的Typescript编译器升级到新的1.8版本,现在遇到了一个问题,即当我尝试导入时,我在带有默认导出的定义文件中定义的模块是“未定义”的 我回到了1.7.5,一切正常,所以它必须与新模块的导出方式有关。我使用webpack->typescript ES6模块->babel进行编译。我比较了从babel升级之前和之后的输出,在输出中有相当多的差异,但最值得注意的是缺少包装我的导入的InteroprequiredFault函数 从定义文件(works)中: Typescript 1.7.5->Babel的输出:Javascript Babel不再对Typescript 1.8应用“InteroPrequiredFault”,javascript,typescript,webpack,babeljs,ractivejs,Javascript,Typescript,Webpack,Babeljs,Ractivejs,我刚刚将我的Typescript编译器升级到新的1.8版本,现在遇到了一个问题,即当我尝试导入时,我在带有默认导出的定义文件中定义的模块是“未定义”的 我回到了1.7.5,一切正常,所以它必须与新模块的导出方式有关。我使用webpack->typescript ES6模块->babel进行编译。我比较了从babel升级之前和之后的输出,在输出中有相当多的差异,但最值得注意的是缺少包装我的导入的InteroprequiredFault函数 从定义文件(works)中: Typescript 1.7
function(module, exports, __webpack_require__) {
"use strict";
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
Object.defineProperty(exports, "__esModule", {
value: true
});
var _ractive = __webpack_require__(212);
var _ractive2 = _interopRequireDefault(_ractive);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var __awaiter = undefined && undefined.__awaiter || function (thisArg, _arguments, Promise, generator) {
return new Promise(function (resolve, reject) {
generator = generator.call(thisArg, _arguments);
function cast(value) {
return value instanceof Promise && value.constructor === Promise ? value : new Promise(function (resolve) {
resolve(value);
});
}
function onfulfill(value) {
try {
step("next", value);
} catch (e) {
reject(e);
}
}
function onreject(value) {
try {
step("throw", value);
} catch (e) {
reject(e);
}
}
function step(verb, value) {
var result = generator[verb](value);
result.done ? resolve(result.value) : cast(result.value).then(onfulfill, onreject);
}
step("next", void 0);
});
};
var Main = function () {
function Main() {
_classCallCheck(this, Main);
this._rendered = false;
this.ractive = new _ractive2.default({
el: null,
append: true,
template: __webpack_require__(213),
transitions: {
fade: __webpack_require__(214)
}
});
}
_createClass(Main, [{
key: "enable",
value: function enable() {
if (this._rendered) {
return;
}
this._rendered = true;
return this.ractive.render("body");
}
}, {
key: "disable",
value: function disable() {
if (!this._rendered) {
return;
}
this._rendered = false;
return this.ractive.unrender();
}
}, {
key: "rendered",
get: function get() {
return this._rendered;
}
}]);
return Main;
}();
var m = new Main();
exports.default = m;
我不确定更新的Typescript版本是什么导致了Babel输出的剧烈变化
这是原始的打字稿
import Ractive from "ractive";
class Main {
private ractive: Ractive.Ractive;
private _rendered: boolean = false;
constructor() {
this.ractive = new Ractive({
el: null,
append: true,
template: require("./main.mustache"),
transitions: {
fade: require<Ractive.TransitionPlugin>("ractive-transitions-fade")
}
});
}
public get rendered() {
return this._rendered;
}
public enable() {
if (this._rendered) {
return;
}
this._rendered = true;
return this.ractive.render("body");
}
public disable() {
if (!this._rendered) {
return;
}
this._rendered = false;
return this.ractive.unrender();
}
}
let m = new Main();
export default m;
从“Ractive”导入Ractive;
班长{
私人的,有吸引力的:有吸引力的,有吸引力的;
private _rendered:boolean=false;
构造函数(){
this.ractive=新的ractive({
el:空,
附加:对,
模板:require(“./main.mustache”),
过渡:{
淡入淡出:需要(“淡入淡出淡入淡出”)
}
});
}
公共获取呈现(){
归还这个;
}
公共启用(){
如果(这一点){
返回;
}
这是真的;
返回此.ractive.render(“主体”);
}
公共禁用(){
如果(!this.\u渲染){
返回;
}
这个._rendered=false;
返回此.ractive.unender();
}
}
设m=newmain();
导出默认值m;
感谢您的帮助。谢谢我修复了它,结果是我的ts加载程序对于webpack来说已经过时了,并且导致了一些问题。更新到0.8.1解决了这个问题。TS 1.7.5与TS 1.8.7(我认为是最新版本)的编译输出有什么不同?如果这里是TS的错,那么在Babel处理代码之前查看TS输出中的差异是有意义的。这是不可思议的。两个输出相同。然而,工作输出和非工作输出之间的唯一区别是typescript版本。是的,这很奇怪。显然,Babel将处理相同的文件:)关于某些软件包使用的TypeScript版本,可能在您的构建过程中发生了一些奇怪的事情?我完全迷路了。我对两个版本的tsc的输出进行了比较,结果都是一样的。这怎么可能呢。
function(module, exports, __webpack_require__) {
"use strict";
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var ractive_1 = __webpack_require__(212);
var Main = function () {
function Main() {
_classCallCheck(this, Main);
this._rendered = false;
this.ractive = new ractive_1.default({
el: null,
append: true,
template: __webpack_require__(213),
transitions: {
fade: __webpack_require__(214)
}
});
}
_createClass(Main, [{
key: "enable",
value: function enable() {
if (this._rendered) {
return;
}
this._rendered = true;
return this.ractive.render("body");
}
}, {
key: "disable",
value: function disable() {
if (!this._rendered) {
return;
}
this._rendered = false;
return this.ractive.unrender();
}
}, {
key: "rendered",
get: function get() {
return this._rendered;
}
}]);
return Main;
}();
var m = new Main();
exports.default = m;
ractive_1.default is not a function
import Ractive from "ractive";
class Main {
private ractive: Ractive.Ractive;
private _rendered: boolean = false;
constructor() {
this.ractive = new Ractive({
el: null,
append: true,
template: require("./main.mustache"),
transitions: {
fade: require<Ractive.TransitionPlugin>("ractive-transitions-fade")
}
});
}
public get rendered() {
return this._rendered;
}
public enable() {
if (this._rendered) {
return;
}
this._rendered = true;
return this.ractive.render("body");
}
public disable() {
if (!this._rendered) {
return;
}
this._rendered = false;
return this.ractive.unrender();
}
}
let m = new Main();
export default m;