如何将其他类型导入到 typescript .d.ts 模块中

kev*_*ler 3 typescript webpack gl-matrix typescript-typings

我有.d.ts一个外部模块的自定义文件,如下所示

declare module 'vertices-bounding-box' {
  export default function boundingBox(positions: [number,number,number][]): [number, number]
}
Run Code Online (Sandbox Code Playgroud)

[number,number,number]我不想使用另一个模块中的类型,例如:

import { vec3 } from 'gl-matrix';

declare module 'vertices-bounding-box' {
  export default function boundingBox(positions: vec3[]): [number, number]
}
Run Code Online (Sandbox Code Playgroud)

当我添加导入声明时,TSC 抱怨vec3道:

Invalid module name in augmentation. Module 'vertices-bounding-box' resolves to an untyped
module at '/Users/kevzettler/code/hypeworks/node_modules/vertices-bounding-box/index.js', which cannot be augmented. [2665]
Run Code Online (Sandbox Code Playgroud)

bel*_*a53 5

您刚刚展示了TypeScript 中导入类型最常见的用例:

模块可以导入其他模块中声明的类型。但非模块全局脚本无法访问模块中声明的类型。输入导入类型。

换句话说,此语言功能允许从项目文件的全局范围内导入外部模块 的类型,如下所示:'gl-matrix'.d.ts

// ext-module.d.ts, important: don't use ES import statement here
declare module 'vertices-bounding-box' {
  export default function boundingBox(
    positions: Array<import("gl-matrix").vec3>): [number, number]
}
Run Code Online (Sandbox Code Playgroud)

import注意:没有 ES / 的文件export是全局脚本而不是模块。

'vertices-bounding-box'没有自己的类型,因此需要在全局脚本文件中声明这些类型,如上所示。对于您想要扩展现有类型(例如 DefinelyTyped / )的情况@types,您将保留顶级 ES 导入

import { vec3 } from 'gl-matrix';
// ...
Run Code Online (Sandbox Code Playgroud)

在此文件中,因为模块增强需要一个module