从TypeScript调用JavaScript类:未捕获的TypeError…不是构造函数

问题描述 投票:0回答:1

[我正在尝试将TypeScript包内的atom-select-list包中的普通JavaScript类用于Atom(link)。

我为此第三方依赖性添加了declaration,并像这样将其包含在我的软件包中:

/// <reference path="../types/atom-select-list.d.ts"/>
import {SelectListView} from 'atom-select-list'; // copmiled to: `const atom_select_list_1 = require("atom-select-list");`

但是,出现此错误

~\atom-indent-detective\dist\selector.js:11
Hide Stack Trace
TypeError: atom_select_list_1.SelectListView is not a constructor
    at Object.selector_show (~\atom-indent-detective\dist\selector.js:11:26)
    at HTMLElement.indentDetectiveChooseIndent (../lib/indent-detective.ts:1:12)
    at CommandRegistry.handleCommandEvent (~\atom-nightly\app-1.46.0-nightly8\resources\app\static\<embedded>:11:349292)
    at CommandRegistry.dispatch (~\atom-nightly\app-1.46.0-nightly8\resources\app\static\<embedded>:11:347767)
    at HTMLSpanElement.view.onclick (~\atom-indent-detective\dist\status.js:24:34)

指向

indentListView = new SelectListView(...) //  compiled to `indentListView = new atom_select_list_1.SelectListView({...`

这是我的tsconfig.json:

{
  "compilerOptions": {
    //// Linting Options - Uncomment options to get more features (usually more restrictive)
//        "strict": true, // includes all of the following and more
    "strictNullChecks": true,
    //    "forceConsistentCasingInFileNames": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noImplicitReturns": true,
    "noImplicitAny": true,
//    "noImplicitThis": true,
    "noFallthroughCasesInSwitch": true,
    "allowJs": true,

    //// Compilation options
    "declaration": true,
    "emitDecoratorMetadata": true,
    "esModuleInterop": true,
    "experimentalDecorators": true,
    "incremental": true,
    "inlineSourceMap": true,
//    "preserveConstEnums": true,
//    "sourceMap": true,
    "preserveSymlinks": true,
    "removeComments": true,


//    "jsx": "react",
//    "jsxFactory": "etch.dom",
    "lib": [
      "ES2018",
      "dom"
    ],
    "target": "ES2018",

    "module": "commonjs",
    "moduleResolution": "node",
//    "noLib": false,
//    "importHelpers": true, // if true you should add tslib to deps
//    "skipLibCheck": false,

    "outDir": "../dist"
  },
  "compileOnSave": true
}

use babel在我的package.json中具有以下配置:

  "babel": {
    "presets": ["@babel/typescript"],
    "plugins": [
      "@babel/proposal-class-properties",
      "@babel/proposal-object-rest-spread",
      "@babel/plugin-transform-runtime"
    ],
    "ignore": ["node_modules", "src/test"]
  }
javascript typescript import babel atom-editor
1个回答
0
投票

我使用以下方法解决了问题:

import SelectListView from 'atom-select-list' 

const SelectListView = require('atom-select-list')
© www.soinside.com 2019 - 2024. All rights reserved.