[我正在尝试将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"]
}
我使用以下方法解决了问题:
import SelectListView from 'atom-select-list'
或
const SelectListView = require('atom-select-list')