问题描述
我正在尝试通过DefinitelyTyped导入模块以及其类型定义包中的某些类型。我都安装了:
npm i -D leaflet
npm i -D @types/leaflet
(这将是一个小叶插件,需要将小叶作为peerDependency
,因此在小叶本身上是-D
。
import L from 'leaflet';
import type { LatLng } from 'leaflet'
但是打字稿告诉我Module '"/Users/seth/Documents/GitHub/leaflet-topography/node_modules/@types/leaflet/index"' has no default export.ts(1192)
。没错,但是我不是在尝试从类型定义中导入L
,而是从Leaflet包本身中导入。为什么打字稿假设这是一个类型定义?我该如何更改,以使我要导入的L
是传单库本身?
解决方法
取决于构建引擎/ TypeScript编译器的配置方式,您可能需要将其编写为:
import * as L from "leaflet";
,
为什么打字稿假定这是一个类型定义?
整个目的d.ts
文件或类型Declaration files
的目的是为打字稿提供有关用JavaScript
编写的API的类型信息。您仍在阅读leaflet
包,但是打字稿编译器会寻找用于API的类型定义文件,以便在打字稿平台下工作。这将有助于使用d.ts
文件中定义的类型注释的所有静态类型分析的打字稿。
当您安装@typings
传单时,它将成为打字稿生态系统的一部分。
我该如何更改,以使我要导入的L是传单 库本身?
如上所述,打字稿将为传单API寻找类型定义文件,该文件实际上是在调用传单API详细信息。
根据传单类型的定义,文件L
是一个命名空间,没有默认的导出。因此,您必须按如下所示导入此命名空间-
import * as L from 'leaflet';
如果您要从传单中导入任何特定的类,则可以使用以下语法-
import { Circle } from 'leaflet'; //**NOTE DON'T MISS THE CURLY BRACES**
解决该错误的其他方法是更改tsconfig.json文件中的设置
"allowSyntheticDefaultImports": true /* Allow default imports from modules with no default
export. This does not affect code emit,just typechecking. */