无法使用typescript导入默认值

无法使用typescript导入默认值,typescript,webpack,Typescript,Webpack,有一个名为“resize observer polyfill”的库,它声明它有一个默认导出: declare var ResizeObserver: { prototype: ResizeObserver; new(callback: ResizeObserverCallback): ResizeObserver; } export default ResizeObserver; 但我无法导入此库,因为TS抱怨 import ResizeObserver from 'resize-o

有一个名为“resize observer polyfill”的库,它声明它有一个默认导出:

declare var ResizeObserver: {
  prototype: ResizeObserver;
  new(callback: ResizeObserverCallback): ResizeObserver;
}

export default ResizeObserver;
但我无法导入此库,因为TS抱怨

import ResizeObserver from 'resize-observer-polyfill'

// If I do this instead, TS is happy but ResizeObserver is undefined !!
import * as ResizeObserver from 'resize-observer-polyfill'
TS配置摘录:

, "compilerOptions":
  { "jsx": "react"
  , "module": "commonjs"
  , "noImplicitAny": true
  , "outDir": "output/dist"
  , "reactNamespace": "JSX"
  , "sourceMap": true
  , "strictNullChecks": true
  , "target": "es6"
  }
使用allowSyntheticDefaultImports可以使类型和运行时愉快,但许多导入都会失败(使用ts jest),除非我将SkipAbel设置为true

使用
skipabel
选项,此导入在具有未定义值的测试中失败,我必须在测试中使用
import*作为ResizeObserver
语法

正确的方法是什么?为什么会如此混乱?

尝试第一种语法(
从“resize observer polyfill”导入ResizeObserver
),其中
allowSyntheticDefaultImports
esModuleInterop
tsconfig.json
中都设置为true。您需要前者来允许
import ResizeObserver
而不是
import*as ResizeObserver
,我认为您可能需要后者,因为您的目标是
es6


我发现这对理解这一点非常有帮助。

尝试从“resize observer polyfill”导入{ResizeObserver}我相信您必须声明一个与库同名的模块。