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

时间:2020-10-20 20:57:42

标签: typescript webpack typescript-typings gl-matrix

我有一个自定义的.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]
}

我为vec3添加导入语句时,TSC抱怨说:

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]

1 个答案:

答案 0 :(得分:1)

您刚刚在TypeScript中展示了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'没有自己的类型,因此需要在全局脚本文件中声明它们,如上所示。 在某些情况下,如果您想从DefinitelyTyped / @types中像extend already existing types一样,则可以保留顶级ES导入

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

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