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

How to import other types in to a typescript .d.ts module

我有一个自定义 .d.ts 外部模块文件,看起来像

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

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

import { vec3 } from 'gl-matrix';

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

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]

您刚刚在 TypeScript 中展示了 import types 最普遍的用例:

Modules can import types declared in other modules. But non-module global scripts cannot access types declared in modules. Enter import types.

换句话说,此语言功能允许从全局范围中导入外部模块'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]
}

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

'vertices-bounding-box' 没有自己的类型,因此需要在 全局脚本文件 中声明这些类型,如上所示。 对于某些情况,如果你想 extend already existing types 就像来自 DefinitelyTyped / @types,你会保留 top-level ES import

import { vec3 } from 'gl-matrix';
// ...

在此文件中,因为模块扩充需要 模块