82

在测试从打字稿文件转译的一些 javascript 代码时,我收到以下错误。

这是错误:

Error: _mapAction2.default is not a constructor

这是导致错误的代码行:

var mapAction = new MapAction(MapActionType.POLYGONDRAGGED, []);

这是原始的打字稿文件map-action.ts

import { IMapAction} from './imap-action';
import { MapActionType } from './map-action-type.enum';
import {LatLngLiteral} from 'angular2-google-maps/core';

export class MapAction implements IMapAction{
    type: MapActionType;
    paths: Array<LatLngLiteral>;

    constructor(mapActionType: MapActionType, paths: Array<LatLngLiteral>){
        this.type = mapActionType;
        this.paths = paths;
    }

    public getType(): MapActionType{
        return this.type;
    }

    public getPaths(): Array<LatLngLiteral>
    {
        return this.paths;
    }

}

这是转译的 .js 文件map-action.js

"use strict";
class MapAction {
    constructor(mapActionType, paths) {
        this.type = mapActionType;
        this.paths = paths;
    }
    getType() {
        return this.type;
    }
    getPaths() {
        return this.paths;
    }
}
exports.MapAction = MapAction;
//# sourceMappingURL=map-action.js.map
4

5 回答 5

90

您需要导出一个默认值,如下所示:

export default class MapAction implements IMapAction {...

并将其导入为:

import MapAction from './map_action_file';

或者,如果您想从模块中导出多个内容,您可以执行以下操作:

export class MapAction ...
export class MapSomethng ...

并按如下方式导入:

import { MapAction, MapSomething } from './map_action_file';
于 2017-03-07T15:50:34.423 回答
17

检查您的导入是否正确。例如,您可能会错过 {}。

import LatLngLiteral from '';

import { LatLngLiteral } from '';
于 2018-09-18T11:12:54.950 回答
15

另一种解决方案是添加"esModuleInterop": true,tsconfig.json.

esModuleInterop允许从没有默认导出的模块默认导入。

于 2020-10-05T17:34:30.463 回答
0

我在使用 node JS 和 mongoDB 时遇到了这个问题。问题出在我导入用户模型的方式上。

这是对我有用的方式

import { User } from '../models/User'
于 2021-09-21T15:04:49.583 回答
-6

由于 javascript 中的类是语法糖,我想我会尝试在没有它们的情况下解决这个问题。对我来说,将架构切换到原型似乎已经解决了我的问题。发布以防其他人遇到此问题但已经在做export default

于 2018-03-30T17:13:10.320 回答