Mapbox-sdk-js 的 Typescript 导入子模块未找到错误

mar*_*st2 1 mapbox typescript definitelytyped

当使用 时,我偶然发现了打字稿导入中的奇怪行为@mapbox/mapbox-sdk。我已经安装了@mapbox/mapbox-sdk和@types/mapbox__mapbox-sdk。代码本身可以工作。问题严格来说是打字。

首先我尝试了以下导入:

import { MapiRequest } from '@mapbox/mapbox-sdk/lib/classes/mapi-request';
import Geocoding from '@mapbox/mapbox-sdk/services/geocoding';
import Matrix from '@mapbox/mapbox-sdk/services/matrix';
Run Code Online (Sandbox Code Playgroud)

当我这样做时,这 3 个导入出现 3 个类似的错误

Could not find a declaration file for module '@mapbox/mapbox-sdk/lib/classes/mapi-request'. '<path>/node_modules/@mapbox/mapbox-sdk/lib/classes/mapi-request.js' implicitly has an 'any' type.
  Try `npm install @types/mapbox__mapbox-sdk` if it exists or add a new declaration (.d.ts) file containing `declare module '@mapbox/mapbox-sdk/lib/classes/mapi-request';`ts(7016)
Run Code Online (Sandbox Code Playgroud)

接下来我尝试导入基础 Mapbox 库。

Could not find a declaration file for module '@mapbox/mapbox-sdk/lib/classes/mapi-request'. '<path>/node_modules/@mapbox/mapbox-sdk/lib/classes/mapi-request.js' implicitly has an 'any' type.
  Try `npm install @types/mapbox__mapbox-sdk` if it exists or add a new declaration (.d.ts) file containing `declare module '@mapbox/mapbox-sdk/lib/classes/mapi-request';`ts(7016)
Run Code Online (Sandbox Code Playgroud)

显然这不起作用(@mapbox/mapbox-sdk包中没有顶级模块),但是 Typescript 突然能够找到MapiRequest、Geocoding和的类型Matrix,并且错误出现在第一行,如下所示

File '<path>/node_modules/@types/mapbox__mapbox-sdk/index.d.ts' is not a module.ts(2306)
Run Code Online (Sandbox Code Playgroud)

1-这里发生了什么?2-我该如何修复它?

Chr*_*ris 7

您需要安装@types/mapbox__mapbox-sdk类型并将类型添加到tsconfig.json:

{
  "compilerOptions": {
    ...
    "types": ["@types/mapbox__mapbox-sdk"],
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)