我正在尝试从使用 webpack 和 babel 编译的打字稿项目中使用https://github.com/timmywil/panzoom。
问题是打字稿方法调用:
import Panzoom from '@panzoom/panzoom';
Panzoom(document.querySelector("#pic"));
Run Code Online (Sandbox Code Playgroud)
被转换为以下 javascript:
panzoom_1.default(document.querySelector("#pic"));
Run Code Online (Sandbox Code Playgroud)
然后生成以下运行时错误:
Uncaught TypeError: panzoom_1.default is not a function
Run Code Online (Sandbox Code Playgroud)
如果我调试 javascript 则panzoom_1具有预期的函数签名并且它没有default成员。
这是无数不同类型的模块、默认导出以及 babel 和 typescript 导入方式的差异之间的某种类型的问题,但我完全迷失了。根据文档,panzoom如果有帮助,是一个 UMD 模块。
我找到了一种解决方法,可以以不同的方式导入,然后将其转换为任何方式,但这显然很疯狂,对吗?:
Uncaught TypeError: panzoom_1.default is not a function
Run Code Online (Sandbox Code Playgroud)
下面是项目配置:
import * as Panzoom from '@panzoom/panzoom';
(<any>Panzoom)(document.querySelector("#pic"));
Run Code Online (Sandbox Code Playgroud)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<img src="pic.jpg" id="pic" />
</body>
<script src="dist/bundle.js" type = "text/javascript"></script>
</html>
Run Code Online (Sandbox Code Playgroud)
{
"compilerOptions": …Run Code Online (Sandbox Code Playgroud) VSCode 调试器总是将导入显示为未定义,即使它们显然没有定义,为什么它会这样做,有没有办法修复它?
在下面的示例中,变量“Lot”被导入并且不是未定义的,如 console.log 行的结果所示,但是当我在调试器中手动键入“Lot”时,它说它是未定义的。
示例中的代码:
import Lot from '../db/models/Lot'
console.log(Lot === undefined) // prints false
console.log("break") // Debugger stopped at this breakpoint shows Lot as undefined
Run Code Online (Sandbox Code Playgroud)
如果我将 Lot 分配给局部变量,那么它会起作用:
const Lot2 = Lot
console.log("break") // Debugger stopped at this breakpoint shows Lot2 as defined
Run Code Online (Sandbox Code Playgroud)